Добавляем новую позицию для модулей Opencart 1.5

В стандартном варианте Opencart имеет всего четыре положения модулей — шапка, левая колонка, правая колонка, низ сайта. Для большинства простых сайтов этого достаточно, но для более сложных конструкций этого мало. Надо сразу заметить, что объявление новых «регионов» для модулей не так просто, как в других CMS, например WordPress или Drupal. Opencart в этом плане менее гибкая система, но это решаемо, поэтому для тех, кому нужно добавить новые расположения для модулей, и будет эта статья.

Одним из самых часто используемых положений является расположение модулей непосредственно в подвале — футере сайта. Во-первых, футер выводится на всех страницах сайта, поэтому отображенная в нем информация будет доступна с любой страницы, во-вторых, в стандартной версии явно не хватает возможности редактировать то, что будет показано в футере.

Добавляем новую позицию модулей:

1. Создадим файл контроллера. Заходим в папку catalog/controller/common/ и создадим файл footer_new.php. В файл вставим следующий код:

<?php
class ControllerCommonFooterNew extends Controller {
    public function index() {
        $this->load->model('design/layout');
        $this->load->model('catalog/category');
        $this->load->model('catalog/product');
        $this->load->model('catalog/information');
 
        if (isset($this->request->get['route'])) {
            $route = (string)$this->request->get['route'];
        } else {
            $route = 'common/home';
        }
 
        $layout_id = 0;
 
        if ($route == 'product/category' && isset($this->request->get['path'])) {
            $path = explode('_', (string)$this->request->get['path']);
 
            $layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
        }
 
        if ($route == 'product/product' && isset($this->request->get['product_id'])) {
            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
        }
 
        if ($route == 'information/information' && isset($this->request->get['information_id'])) {
            $layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
        }
 
        if (!$layout_id) {
            $layout_id = $this->model_design_layout->getLayout($route);
        }
 
        if (!$layout_id) {
            $layout_id = $this->config->get('config_layout_id');
        }
 
        $module_data = array();
 
        $this->load->model('setting/extension');
 
        $extensions = $this->model_setting_extension->getExtensions('module');
 
        foreach ($extensions as $extension) {
            $modules = $this->config->get($extension['code'] . '_module');
 
            if ($modules) {
                foreach ($modules as $module) {
                    if ($module['layout_id'] == $layout_id && $module['position'] == 'footer_new' && $module['status']) {
                        $module_data[] = array(
                            'code'       => $extension['code'],
                            'setting'    => $module,
                            'sort_order' => $module['sort_order']
                        );
                    }
                }
            }
        }
 
        $sort_order = array();
 
        foreach ($module_data as $key => $value) {
            $sort_order[$key] = $value['sort_order'];
        }
 
        array_multisort($sort_order, SORT_ASC, $module_data);
 
        $this->data['modules'] = array();
 
        foreach ($module_data as $module) {
            $module = $this->getChild('module/' . $module['code'], $module['setting']);
 
            if ($module) {
                $this->data['modules'][] = $module;
            }
        }
 
        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/footer_new.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/common/footer_new.tpl';
        } else {
            $this->template = 'default/template/common/footer_new.tpl';
        }
 
        $this->render();
    }
}
?>

2. Сделаем TPL файл для новой позиции. В папке catalog/view/theme/default/template/common/ (вместо default, конечно же, заходим в папку вашего шаблона, для которого регистрируете новую позицию) создаем файл footer_new.tpl. В файл вставляем код:

<?php foreach ($modules as $module) { ?>
   <?php echo $module; ?>
<?php } ?>

3. Саму позицию мы уже зарегистрировали, теперь надо описать ее вывод в нужном месте шаблона. Это делается в несколько этапов.

Редактируем файл catalog/controller/common/footer.php (обратите внимание — это обычный файл футера, а не footer_new.php, который мы создавали в начале статьи), ищем строку

$this->render();

и вставляем перед ней

$this->children = array(    

'common/footer_new'

);

 

Контроллер объявили, теперь редактируем tpl файл catalog/view/theme/default/template/common/footer.tpl, в нем, как правило, один большой блок

<div id=»footer»></div>, в зависимости от того, где нам нужно вывести модули, вставляем следующий код до или после блока, я вставлю после, чтобы новая позиция была в самом низу сайта:

<?php echo $footer_new; ?>

4. Новая позиция не добавляется в админку автоматически, поэтому придется дописывать ее каждому модулю вручную. Поэтому решите сразу, какие модули будут отображаться на новом месте, чтобы не выполнять лишнюю работу. Редактируем файл необходимого модуля, например, модуль последних поступлений admin/view/template/module/latest.tpl, ищем в нем подобный код:

<?php if ($module['position'] == 'content_top') { ?>
   <option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
<?php } else { ?>
   <option value="content_top"><?php echo $text_content_top; ?></option>
<?php } ?>

И перед ним добавляем:

<?php if ($module['position'] == 'footer_new') { ?>
   <option value="footer_new" selected="selected">Footer New</option>
<?php } else { ?>
   <option value="footer_new">Footer New</option>
<?php } ?>

Ниже в файле ищем строку:

html += '      <option value="content_top"><?php echo $text_content_top; ?></option>';

Добавляем над ней:

html += '      <option value="footer_new">Footer New</option>';

5. Если все было сделано правильно, теперь можно зайти в админку в настройки модуля последних поступлений, и вы увидите, что кроме четырех стандартных позиций добавилась новая. Выбираем ее и смотрим на результаты.

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
× iOs app

To install this Web App in your iPhone/iPad press iOs sourse and then Add to Home Screen.