Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Создание позиции вывода модулей в OpenCart

Автор: в категории Статьи о php 9 комментариев

При создании интернет магазинов дизайн играет немаловажную роль. И случается так, что возможностей по выводу модулей OpenCart не хватает. Например вам необходимо вывести модуль в низу страницы (футере) или в другом месте, которое не указано в стандартных расположениях (верх и низ страницы, левая и правая колонка — position).

Для решения данной проблемы необходимо создать новое расположение. Сделать это очень просто следуя инструкции.

1. Создать файл шаблона для вашей позиции (расположения). Для этого можете скопировать любой уже имеющийся шаблон и переименовать его согласно желаемому названию, например content_category_filter.tpl.

 

2. Создать контроллер для вашей позиции. Опять таки можете скопировать любой уже имеющийся контроллер, однако тут придется его отредактировать. В первую очередь необходимо изменить класс в нашем случае на ControllerCommonContentCategoryFilter. Далее найти строку вида:

if ($module['layout_id'] == $layout_id && $module['position'] == 'content_top' && $module['status']) {

Как видите в данной строке отсеиваются включенные модули которые определены к выводу в верхней части страницы, на что указывает content_top, соответственно заменяем на content_category_filter и получаем следующий вид строки:

if ($module['layout_id'] == $layout_id && $module['position'] == 'content_category_filter' && $module['status']) {

Далее также заменяем имя шаблона для вывода в строках 69-72, указывая на шаблон, созданный в п.1. Получаем вот такой кусок кода:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/content_category_filter.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/content_category_filter.tpl';
} else {
$this->template = 'default/template/common/content_category_filter.tpl';}

 

3. Теперь необходимо подключить нашу позицию для вывода на страницы, где будут выводиться модули, находящиеся в этой позиции. Для этого откройте контроллер любой страницы, например категорий (category.php) и найдите строки:

$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);

Сюда нам необходимо добавить подключение нашей позиции. Просто впишите ее в массив. Обратите внимание: если вы подключите ее последним элементом (добавите в конец массива, после common/header), то скрипты и стили не будут подключены! Рекомендуется подключать свою позицию исключительно перед footer и header! Например:

$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/content_category_filter',
'common/footer',
'common/header'
);

 

4. Подключив позицию в контроллере нам необходимо вывести ее в шаблоне. Сделать это достаточно просто, вписав в нужное место в шаблоне страницы название переменной позиции, например:

<?php echo $content_category_filter; ?>

 

5. Теперь перейдем к административной части. Чтобы мы могли указать нашу позицию какому-нибудь модулю нам необходимо открыть файл (администраторского) шаблона данного модуля, например admin/view/template/module/category.tpl и найти строки, содержащие выпадающий список позиций. Для этого просто ищите по документу строку [position] или content_bottom.

В стандартных шаблонах данная переменная встречается 2 раза:

  1. При выводе уже имеющихся модулей в html;
  2. При добавлении нового модуля в JavaScript.

В прочих модулях количество вхождений может быть больше. После того как вы нашли нужный select просто добавьте ему новую опцию со значением новой позиции, например:

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

Тоже самое необходимо проделать и с JS частью, например:

html += '      <option value="content_category_filter">content_category_filter</option>';

После этого при редактировании модуля вам будет доступна новая позиция.

Create new position opencart

Позиция создана, модуль выведен. Действия 3 и 4 необходимо проделать со всеми страницами, на которых вам необходимо вывести позицию. Все файлы вы можете найти с помощью поиска по содержимому файлов если искать например content_top или content_bottom — это нативные (стандартные) позиции. Также действие 5 необходимо повторить для каждого из модулей отдельно.

comments powered by HyperComments

Не забудь подписаться на группы в социальных сетях, чтобы всегда быть вкурсе последних событий!

Слава
2014-12-01 17:47:45
СПАСИБО! Две недели искал подобную инструкцию)
Nikita Sp
2014-12-01 17:48:01
всегда рад помочь. Спасибо за комментарий)
Сергей
2015-09-22 18:22:08
Интересная статья.
Mnac Hayrapetyan
2016-04-30 04:28:23
А как удалить дубли товар?
Nikita Sp
2016-04-30 04:28:54
В смысле? Вы о чем?
Василь Угляр
2016-07-21 12:39:59
Спасибо огромное за подробную инструкцию! Для дефолтного шаблона работает все прекрасно, а вот для шаблона на базе Pavo Themes при всех необходимых изменениях в месте вывода шаблона выводится ошибка "Notice: Undefined variable: " Опенкарт 1.5.6 Подскажите пожалуйста, в чем может быть ошибка?
Nikita Sp
2016-07-21 12:40:31
Спасибо за комментарий, но у вас не полное описание ошибки.
Василь Угляр
2016-07-22 10:15:19
Сайт http://***.com.ua/ (временный субдомен), ошибка: Notice: Undefined variable: adv_top in /var/www/shoester/data/www/***/catalog/view/theme/pav_citymart/template/common/header.tpl on line 141
Nikita Sp
2016-07-22 10:15:25
это значит что вы не добавили переменную adv_top в контроллер header.php
Вверх!

Меню блога

Категории блога

Облако тегов