Создание позиции вывода модулей в OpenCart
16 ноября 2014 в 3:07 в категории Статьи о 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 раза:
- При выводе уже имеющихся модулей в html;
- При добавлении нового модуля в 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>';
После этого при редактировании модуля вам будет доступна новая позиция.
Позиция создана, модуль выведен. Действия 3 и 4 необходимо проделать со всеми страницами, на которых вам необходимо вывести позицию. Все файлы вы можете найти с помощью поиска по содержимому файлов если искать например content_top или content_bottom — это нативные (стандартные) позиции. Также действие 5 необходимо повторить для каждого из модулей отдельно.
9 комментариев
СПАСИБО!
Две недели искал подобную инструкцию)
всегда рад помочь. Спасибо за комментарий)
Интересная статья.
А как удалить дубли товар?
В смысле?
Вы о чем?
Спасибо огромное за подробную инструкцию! Для дефолтного шаблона работает все прекрасно, а вот для шаблона на базе Pavo Themes при всех необходимых изменениях в месте вывода шаблона выводится ошибка «Notice: Undefined variable: »
Опенкарт 1.5.6
Подскажите пожалуйста, в чем может быть ошибка?
Спасибо за комментарий, но у вас не полное описание ошибки.
Сайт 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
это значит что вы не добавили переменную adv_top в контроллер header.php