Новая позиция в Opencart 2

opencart2
1 звезда2 звезды3 звезды4 звезды5 звёзд (4 оценок - 5,00 из 5)

В Опенкарт 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 символов, а также надалее повсюду исользовать новое слово.
Содержимое созданого файла:

<?php
class 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>';

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


Оставить комментарий
  1. Макс:

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

  2. Александр:

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

    • grey:

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

  3. boris:

    Добрый день!

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

  4. boris:

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

  5. boris:

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

  6. sanyok:

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

  7. 555:

    Вылезла такая ошибка
    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:

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

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

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

  8. День добрый!

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

  9. Иван:

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

    • Иван:

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

    • Free-IT:

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

  10. Иван:

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

    • Free-IT:

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

      • Иван:

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

        • Free-IT:

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


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

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




Также можете посмотреть другие модули Opencart 2.x или шаблоны Opencart 2.x от других производителей. Большой выбор нулленых модулей Opencart 2.