Я работаю с OCstore 2.3. Статья приминима к любой сборке Opencart ветки 2.3x.
Есть модули, которые выводят структурированную информацию, которую можно отнести только к какой-то одной странице.
Например, модуль блоков — через который можно создать красивый, информационный блок, и вывести его на главной странице — здесь проблем нет, у нас есть схема (макет) — Главная.
А сегодня, мы будем выводить его на одной странице схемы «Информация» (information/information).
Задача была такая: Вывести модуль в схеме «Информация» (information/information) на странице «О компании», то есть в итоге — блоки созданные модулем заменят контент ($content).
Для начала создаем нужный нам модуль. Обратите внимание на его id, эта информация нам пригодится.
После того, как модуль создан, размещаем его в схеме (макете) «Информация», чтобы заменить модулем контент, я разместил его в положении «Вверху страницы» (content_top).
Далее, нам нужно внести изменения в файл контроллера вывода позиций модуля «Вверху страницы» (content_top). Найти его можно так:
catalog/controller/common/content_top.php
Ищём вот этот блок кода — в самом конце файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (isset($part[1])) { $setting_info = $this->model_extension_module->getModule($part[1]); if ($setting_info && $setting_info['status']) { $output = $this->load->controller('extension/module/' . $part[0], $setting_info); if ($output) { $data['modules'][] = $output; } } } |
Здесь $part[1] — содержит id нашего модуля. Теперь мы можем задать условия, при которых наш модуль будет выводится на нужной нам странице.
Узнаем ID страницы — так-же, как и ID модуля — зайдите в административной панеле в редактирование статьи — в рабочей строке браузера будет ID страницы. У меня страница с ID = 4.
Заменем вот эту часть кода:
1 2 3 4 5 |
if ($output) { $data['modules'][] = $output; } |
На наше условие:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if ($output) { //Выводим блок только на странице с ID = 4 | Модуль ID 59 if ($route == 'information/information' && $this->request->get['information_id'] == 4 && $part[1] == 59) { $data['modules'][] = $output; //Не выводим Модуль ID 59 на других страницах со схемой ИНФОРМАЦИЯ } elseif ($route == 'information/information' && $part[1] == 59) { $data['modules'][] = ""; // Стандартный вывод контента позиции } else { $data['modules'][] = $output; } } |
Теперь модуль отображается только на странице схемы «Информация» с id = 4. Сейчас модуль можно разместить в любой другой схеме (на главной, в продукте), или любой другой позиции — модуль везде будет отображаться, кроме позиции «Вверху страницы» (content_top) на других страницах схемы «Информация» (information/information).
Далее, таким-же способом мы разместим дополнительно созданые модули для каждой информационной страницы сайта: Доставка, Оплата и так далее…
UPDATE:
Вот так выглядит итоговый код для трёх страниц, и трёх модулей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
if ($output) { //Добовляем ID модулей в массив $module_id = array(59,62,63); //О компании if ($route == 'information/information' && $this->request->get['information_id'] == 4 && $part[1] == 59) { $data['modules'][] = $output; //Доставка } elseif ($route == 'information/information' && $this->request->get['information_id'] == 6 && $part[1] == 62) { $data['modules'][] = $output; //Оплата } elseif ($route == 'information/information' && $this->request->get['information_id'] == 8 && $part[1] == 63) { $data['modules'][] = $output; } elseif (in_array((int)$part[1], $module_id)) { $data['modules'][] = ""; } else { $data['modules'][] = $output; } } |