Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Вывод модуля на витрине

Модуль — блок, который можно поставить на страницы витрины: баннер, список товаров, приветствие. Код блока — контроллер витрины в дополнении. Где блок появится, решают не в коде, а в панели — через макеты.

Файлы

extension/acme_hello/catalog/
├── controller/module/acme_hello.php
├── language/ru-ru/module/acme_hello.php
└── view/template/module/acme_hello.twig

Контроллер

В отличие от страницы, модуль не отправляет ответ — он возвращает строку с HTML:

// extension/acme_hello/catalog/controller/module/acme_hello.php
namespace Opencart\Catalog\Controller\Extension\AcmeHello\Module;
 
class AcmeHello extends \Opencart\System\Engine\Controller
{
    public function index(): string
    {
        $this->load->language('extension/acme_hello/module/acme_hello');
 
        $data['text'] = $this->config->get('module_acme_hello_text');
 
        return $this->load->view('extension/acme_hello/module/acme_hello', $data);
    }
}

Текст — это настройка, сохранённая на странице настроек модуля.

Тексты и шаблон

// extension/acme_hello/catalog/language/ru-ru/module/acme_hello.php
$_['heading_title'] = 'Добро пожаловать';
{# extension/acme_hello/catalog/view/template/module/acme_hello.twig #}
<div class="card mb-3">
  <div class="card-header">{{ heading_title }}</div>
  <div class="card-body">{{ text }}</div>
</div>

В шаблоне модуля нет шапки и подвала — это фрагмент, который вставляется в страницу.

Макеты

Макет — именованный набор страниц с одинаковым расположением блоков: «Home», «Product», «Category», «Account». У каждого макета четыре места:

МестоГде находится
Column LeftЛевая колонка
Column RightПравая колонка
Content TopНад содержимым
Content BottomПод содержимым

Размещение модуля

  1. На странице настроек модуля включите статус и введите текст приветствия.
  2. Откройте Design → Layouts и измените макет «Home».
  3. В месте Content Top выберите в списке «Acme Hello», нажмите кнопку добавления и сохраните.

Откройте главную страницу http://shop.test/ — над содержимым стоит карточка с заголовком «Добро пожаловать» и вашим текстом.

Контроллер страницы вызывает common/content_top, тот находит модули текущего макета и вызывает у каждого метод index().

Какая страница к какому макету относится

Макет привязан к маршрутам: на странице редактирования макета есть список маршрутов, например product/product у макета «Product». Чтобы показать модуль на своей странице, создайте новый макет и укажите её маршрут.

Вызов модуля вручную

Модуль — обычный контроллер, поэтому страница может вызвать его напрямую:

$data['hello'] = $this->load->controller('extension/acme_hello/module/acme_hello');

Частая ошибка

Модуль добавлен в макет, а на странице его нет. Ядро пропускает модули, у которых выключена настройка module_acme_hello_status. Откройте настройки модуля, включите переключатель и сохраните.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.