В Опенкарт 2.0 часто нужно чтобы модуль, например слайдер (slideshow), выводился в header (хедер, шапка сайта) или footer (футер, подвал сайта) для всех страниц. Для этого нужно создать новую позицию для вывода в движке Opencart 2.0, прописать ее в header.php или footer.php.
Здесь приведен пример как вставить новую позицию в шапку сайта сделанного на движке Opencart 2.0.

Скачать инструкцию и сопутствующие файлы

Пошаговая инструкция «Как добавить новую позицию для вывода модулей в Opencart 2.0»:
1. Cоздать файл catalog/controller/common/content_newpos.php
!!!Важно — вместо «newpos» можно использовать другое слово, но чтобы длинна слова была =< 6 символов, а также надалее повсюду исользовать новое слово.
Содержимое созданого файла:

<?phpclass ControllerCommonContentNewpos extends Controller {public function index() {$this->load->model('design/layout');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'])) {$this->load->model('catalog/category');$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'])) {$this->load->model('catalog/product');$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);}if ($route == 'information/information' && isset($this->request->get['information_id'])) {$this->load->model('catalog/information');$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');}$data['modules'] = array();$modules = $this->model_design_layout->getLayoutModules($layout_id, 'content_newpos');foreach ($modules as $module) {$part = explode('.', $module['code']);if (isset($part[0]) && $this->config->get($part[0] . '_status')) {$data['modules'][] = $this->load->controller('module/' . $part[0]);}if (isset($part[1])) {$setting_info = $this->model_extension_module->getModule($part[1]);if ($setting_info && $setting_info['status']) {$data['modules'][] = $this->load->controller('module/' . $part[0], $setting_info);}}}if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/content_newpos.tpl')) {return $this->load->view($this->config->get('config_template') . '/template/common/content_newpos.tpl', $data);} else {return $this->load->view('default/template/common/content_newpos.tpl', $data);}}}

Если вы поменяли название позиции, то в этом файле в 5 точках ее нужно поменять.
2. Создаем шаблон для вывода модулей в новой позиции. Создаем файл catalog/view/theme/default/template/common/content_newpos.tpl
Содержимое файла будет таким:

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

3. В файле catalog/controller/common/header.php в конце ищем строку:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) {

и перед ней добавляем следующее:

$data['content_newpos'] =  $this->load->controller('common/content_newpos');

4. Теперь в нужном месте в шаблоне добавим вывод новой позиции.
Откроем catalog/view/theme/default/template/common/header.tpl и в нужном месте добавим:

<?php echo $content_newpos; ?>

5. Последний шаг.
Откроем admin/view/template/design/layout_form.tpl. Найдем строку:

<?php if ($layout_module['position'] == 'column_right') { ?><option value="column_right" selected="selected"><?php echo $text_column_right; ?></option><?php } else { ?><option value="column_right"><?php echo $text_column_right; ?></option><?php } ?>

и сразу после нее добавим код:

<?php if ($layout_module['position'] == 'content_newpos') { ?><option value="content_newpos" selected="selected">Новая позиция</option><?php } else { ?><option value="content_newpos">Новая позиция</option><?php } ?>

далее ищем строку:

html += '    <option value="column_right"><?php echo $text_column_right; ?></option>';

и сразу после нее добавим код:

html += '    <option value="content_newpos">Новая позиция</option>';

Все! Новая позиция уже доступна в админке сайта.

Рубрики: Статьи

21 комментарий

Макс · 31 января, 2015 в 11:50 дп

Спасибо,
очень помогло.

grey · 31 января, 2015 в 11:53 дп

Рады стараться!

Александр · 2 июля, 2015 в 3:20 пп

Сделал все так, появилась позиция в макете, но когда я ставлю позицию в макете Home — в шапке так ничего и не появляется, что я делаю не так? Подскажите пожалуйста

grey · 2 июля, 2015 в 8:53 пп

Проверьте еще раз все по инструкции, я только что проверял на самой новой версии Опенкарт 2.0.3.1 — все работает.

boris · 5 октября, 2015 в 1:28 дп

Добрый день!

А если шаблон не родной инструкция та же ?

boris · 5 октября, 2015 в 1:53 дп

100 раз уже все проверил, ничего не выводится …

boris · 5 октября, 2015 в 1:55 дп

на 101 -й получилось , на последнем пункте…. нашел ошибку

sanyok · 16 октября, 2015 в 11:56 дп

все сделал по инструкции. но при добавке слайдера не добавляет стили и жаву в хеадер

grey · 16 октября, 2015 в 2:07 пп

возможно у вас кеш модификаций, нужно обновить модификации

555 · 18 октября, 2015 в 2:26 пп

Вылезла такая ошибка
Notice: Error: Could not load template /bhome/part3/03/vh47287/oslik.su/www/catalog/view/theme/default/template/common/content_newpos.tpl! in /bhome/part3/03/vh47287/oslik.su/www/vqmod/vqcache/vq2-system_modification_system_engine_loader.php on line 45

grey · 21 октября, 2015 в 1:04 дп

1. Проверьте расширение файла catalog/view/theme/default/template/common/content_newpos.tpl
Оно должно быть именно «.tpl», скорее всего вы сохранили его с расширением «.php»

2. Данный пример приведен для вывода позиции в header.tpl, если вы пробуете выводить в другом месте, соотверственно нужно править контроллер другого файла

UPD. Только что заметил, что вы использете не стандартную тему «default», а «toysandgames». Соответственно файлы нужно редактировать и создавать в этой теме.

Данил · 27 января, 2016 в 10:37 дп

День добрый!

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

Иван · 10 мая, 2016 в 12:01 пп

Добрый день. подскажите получаю такую ошибку
Notice: Undefined index: position in /home/testsite.com.ua/system/storage/modification/catalog/controller/module/html.php on line 8

Иван · 10 мая, 2016 в 12:03 пп

самое интересно что в позицию содержимое выводится, но все равно получаю ошибку

Free-IT · 10 мая, 2016 в 1:43 пп

Зайдите в /catalog/controller/module/html.php
и посмотрите где там переменная с индексом «position» и откуда она, по идее ее там не должно быть

Иван · 10 мая, 2016 в 3:44 пп

ну на 8ой строчке есть такой код http://take.ms/D48tQ, удалив его ошибка пропадает, но верно ли это?

Free-IT · 10 мая, 2016 в 3:53 пп

да, верно
этой строчки там не должно быть, ее туда добавили вручную, это видно даже по форматированию текста)

Иван · 10 мая, 2016 в 5:21 пп

я удаляю данную строчку, но при обновлении модификаторов код опять появляется и соответственно и ошибка

Free-IT · 10 мая, 2016 в 6:33 пп

Я писал зайдите в /catalog/controller/module/html.php,
а вы редактируете файл /system/modifications/catalog/controller/module/html.php

Павел · 11 февраля, 2017 в 5:55 пп

Добрый день. Не подскажите, на версии 2.3.0.2 будет работать? Предполагаю, что нет, но сложно ли будет подпилить вывод позиций под эту версию?

Free-IT · 11 февраля, 2017 в 5:58 пп

Если обратится к спеца думаю будет работать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *