Первый модуль
Модуль — это папка в modules с файлом PHP того же имени. В файле один класс, наследник Module: он описывает модуль и говорит, что делать при установке и удалении. Консольной команды для создания модуля нет — папку и файл создают вручную.
Папка и файл
Создайте папку modules/acmehello и в ней файл acmehello.php. Рядом можно положить значок logo.png размером 32 на 32 пикселя — он виден в списке модулей.
modules/acmehello/
├── acmehello.php
└── logo.pngИмя папки и имя файла совпадают и пишутся строчными латинскими буквами и цифрами. Приставка acme — название вашей компании: так имя не совпадёт с чужим модулем.
Главный класс
<?php
// modules/acmehello/acmehello.php
if (!defined('_PS_VERSION_')) {
exit;
}
class AcmeHello extends Module
{
public function __construct()
{
$this->name = 'acmehello';
$this->tab = 'front_office_features';
$this->version = '1.0.0';
$this->author = 'Acme';
$this->need_instance = 0;
$this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_];
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->trans('Acme: отзывы', [], 'Modules.Acmehello.Admin');
$this->description = $this->trans('Приветствие и отзывы о товарах.', [], 'Modules.Acmehello.Admin');
}
}Откройте в панели «Модули → Менеджер модулей» и наберите в поиске acme: модуль появился в списке с кнопкой «Установить». Проверка _PS_VERSION_ в начале файла не даёт открыть его напрямую из браузера. Имя класса — имя модуля, регистр букв в нём не важен.
Поля конструктора
| Поле | Что означает |
|---|---|
name | Техническое имя. Обязано совпадать с именем папки и файла |
tab | Раздел в списке модулей: front_office_features, administration, payments_gateways, shipping_logistics |
version | Версия модуля. По ней движок понимает, что модуль нужно обновить |
author | Автор, виден в списке модулей |
need_instance | 0 — не создавать объект модуля при показе списка модулей. Почти всегда 0 |
ps_versions_compliancy | С какими версиями PrestaShop модуль работает |
bootstrap | true — страница настроек использует стили панели |
displayName | Название для человека |
description | Описание под названием |
displayName и description задают после parent::__construct(): метод trans() переводит строку, а переводы доступны только после вызова родителя. Переводам посвящён отдельный урок.
Установка и удаление
Добавьте в класс два метода:
// modules/acmehello/acmehello.php
public function install(): bool
{
return parent::install();
}
public function uninstall(): bool
{
return parent::uninstall();
}install() выполняется один раз, когда модуль устанавливают. Позже здесь появятся подписка на хуки, создание таблиц и настройки по умолчанию. uninstall() убирает за собой. Оба метода возвращают true, если всё прошло успешно; при false панель покажет ошибку.
Установка из консоли
Команды запускают из корня магазина:
php bin/console prestashop:module install acmehelloКоманда печатает сообщение об успешной установке. В менеджере модулей кнопка «Установить» сменится на «Выключить». На витрине пока ничего не изменилось: модуль ещё ничего не выводит.
| Действие | Что делает |
|---|---|
install | Устанавливает: вызывает install() |
uninstall | Удаляет: вызывает uninstall() |
reset | Удаляет и ставит заново |
enable, disable | Включает и выключает, не удаляя данные |
Действие подставляют вместо install в команде выше. То же делают кнопки в менеджере модулей.
Частая ошибка
Свойство name написано не так, как папка: acme_hello или AcmeHello. Модуль в списке не появляется или не устанавливается, а в журнале пусто. Папка, файл и name должны совпадать буква в букву: acmehello, acmehello.php, 'acmehello'.