Содержание
Пользовательская часть модуля
Контроллер модуля catalog/controller/extension/module/example.php
Создание контроллера пользовательской части похоже на административную, только не нужно сохранять настройки, нужно только написать код, который вывводит информацию в зависимости от того включен модуль или нет.
class ControllerExtensionModuleExample extends Controller { public function index() { // Загружаем "модель" $this->load->model('extension/module/example'); $data = array(); // Загружаем настройки (для проверки включен модуль или нет) $data = $this->model_extension_module_example->LoadSettings(); // Загружаем языковой файл $data += $this->load->language('extension/module/example'); // Хлебные крошки $data[] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/home') ); $data[] = array( 'text' => $data, 'href' => $this->url->link('extension/module/example') ); // Загружаем остальное $data = $this->load->controller('common/column_left'); $data = $this->load->controller('common/column_right'); $data = $this->load->controller('common/content_top'); $data = $this->load->controller('common/content_bottom'); $data = $this->load->controller('common/footer'); $data = $this->load->controller('common/header'); // Выводим на экран $this->response->setOutput($this->load->view('extension/module/example', $data)); } }
Модель модуля catalog/model/extension/module/example.php
В нашем примере модель пользовательской части маленькая, т.к. нужно лищь прочитать одну настройку.
class ModelExtensionModuleExample extends Model { // Загрузка настроек из базы данных public function LoadSettings() { return $this->config->get('module_example_status'); } }
Языковой файл модуля catalog/langugage/ru-ru/extension/module/example.php
$_ = 'Пример модуля'; $_ = 'Пример модуля на OpenCart 3.x'; $_ = 'Модуль выключен';
Административная часть или бэкенд модуля
Переводы
Переводы Opencart хранятся в каталоге languages, они довольно примитивны и представляют собой PHP файлы содержащие массив $_. В этом массиве прописываются ключи-значения, и, собственно, всё!
В каждой языковой директории имеется файл с названием кода языка (например, languages/ru-ru/ru-ru.php), в котором содержатся общесистемные переводы, а также региональные настройки.
Каждый модуль Opencart должен обладать одноимённым файлом переводов, в котором необходимо наличие секции heading_title, значение этой секции используется для вывода названия модуля в списке модулей:
Контроллер
Настало время разработки контроллера для админки. Для этого создадим файл example.php в директории admin/controller/extension/module:
Обратите внимание на префикс ControllerExtensionModule в названии нашего класса — Controller даёт загрузчику понять что он имеет дело с контроллером, ExtensionModule — что класс лежит в директории extension/module. Теперь давайте создадим свой action с названием index
Этот метод можно считать входной функцией модуля (как функция main в C):
Теперь давайте создадим свой action с названием index. Этот метод можно считать входной функцией модуля (как функция main в C):
Как видите, Opencart помимо готовых переводов, предоставляет также и несколько общих контроллеров, которые используются для добавления интерфейсных частей вроде шапки и подвала.
Представление или шаблон
Opencart не использовал внешних шаблонизаторов вплоть до третьей версии (там прикрутили twig), и по сути шаблоны, это такая мешанина html + php.
У такой связки есть только один минус — она позволяет говнокодить и использовать php в шаблоне не по назначению.
Давайте создадим шаблон для нашего модуля — view/template/extension/module/example.tpl:
Отлично!
Административная часть модуля готова, давайте протестируем её. Для этого можно пойти двумя путями.
- Традиционный способ, унаследованный из первых версий движка: просто копируем содержимое папки upload в корень установленного Opencart
- Более удобный для дистрибуции: упаковываем папку upload в ZIP архив с названием <имя_модуля>.ocmod.zip и устанавливаем модуль штатным установщиком Opencart.
Во время разработки более удобен способ с простым копированием файлов, однако, распространять свой модуль лучше всего в виде *.ocmod.zip файла.
Bash tip:
Для удобного и быстрого копирования всех файлов нашего модуля в движок, можно воспользоваться командой rsync:
А для быстрого создания нужного нам архива можно воспользоваться консольной версией zip:
После того как модуль будет внедрён одним из способов в систему, нужно его установить (находим его в разделе «дополнения/дополнения» и кликаем по зелёной кнопке установки). Кроме того, поскольку наш модуль подразумевает возможность вставки через интерфейс настройки шаблонов, нужно его активировать (переходим в редактирование модуля и выбираем статус «включено»):
На заметку
Управление статусом нужно только тем модулям, которые можно встраивать через макеты. В обратном случае вовсе необязательно вообще реализовывать поддержку статуса.
Как только мы включили модуль, он становится доступен для выбора в настройках макетов. Теперь мы с лёгкостью можем добавить его на сайт:
Однако, сейчас вы не увидите никаких изменений на странице, поскольку мы не написали ни строки управляющего кода для фронтенд части (catalog).
Концептуальной разницы между admin/catalog частями модуля почти нет, стоит только упомянуть, что в панели администрирования нет такого понятия как «тема» — там все представления располагаются сразу в папке template.
Фронтендная часть модуля подразумевает такую структуру файлов представления: view/theme/default/template/extension/module.
Пользовательская часть (или фронтенд)
Контроллер
Помните, я упоминал контроллеры, которые возвращают отрендеренные шаблоны, а не устанавливают их в объект Response?
Для фронтенда мы воспользуемся именно таким способом вывода содержимого − catalog/controller/extension/module/example.php:
При выводе модуля, прикреплённого в макете, Opencart вызывает индексный экшн (метод index). В нём мы проверяем — существует-ли кастомное представление в текущей теме сайта ($this->config->get(‘config_template’)), и если существует, то оно и будет загружено, если нет, то будет использовано представление из темы default.
Таким образом мы позволяем пользователям нашего модуля гибко изменять шаблоны модуля согласно своим требованиям.
А вот и наше стандартное представление − catalog/view/theme/default/template/extension/module/example.tpl:
Когда вы запакуете и установите обновлённую версию нашего модуля, то получите что−то в таком духе:
Подведём итог
Мы разработали абсолютно бесполезный, но собственный модуль для Opencart 2. Рассмотрели базовые принципы разработки и некоторые подводные камни.
В следующей статье я планирую рассказать о системе OCmod/VQmod, показать что это, зачем и как использовать.
Помните — Opencart это свободное программное обеспечение, поэтому вы можете самостоятельно изучать и модифицировать его в своих целях.
Создание архива для загрузки модуля установщиком расширений
Когда модуль полностью готов, его лучше оформить в виде архивного файла, который OpenCart может загрузить и установить в систему. Для этого нужно создать папку upload и поместить в нее все файлы модуля со всей структурой папок в которых они находятся. Затем папку нужно упаковать в zip-архив с именем название_модуля.ocmod.zip. В примере выше получится архив example.ocmod.zip.
Скачать пример модуля example.ocmod.zip создание которого было описано выше.
Теперь модуль готов для автоустановки установщиком расширений.
После установки модуля он появляется в списке модулей.
Модуль нужно активировать нажав на зеленую кнопку со знаком «плюс», после чего можно зайти в настройки модуля через синюю кнопку со знаком «карандаш».
В модуле можно менять одну настройку — статус (выключено/включено), а в пользовательской части мы заходим по адресу index.php?route=extension/module/example и наблюдаем за изменениями в зависимости от настройки модуля.
С этим читают
- Глобальные переменные в wordpress
- Статический анализ php-кода на примере phpstan, phan и psalm
- Сравнение производительности версий php
- Реализация mvc паттерна на примере создания сайта-визитки на php
- Как установить mysql на сервер с ubuntu 18.04
- Отправка e-mail в php
- Бесплатная карта opencard от банка открытие: кэшбэк 2-3% на все
- Require
- Анализ страницы zira cms вконтакте
- Как создать файл phpinfo и проверить информацию о php