Первый модуль
Модуль — папка с кодом и настройками, которую Magento подключает как единое целое. Весь свой код разработчик пишет в модулях. Команды для создания модуля в Magento нет: два обязательных файла создают вручную.
Где лежит модуль
Свои модули находятся в app/code/Поставщик/Модуль. Поставщик — название компании или автора, оно отделяет ваши модули от чужих. Создадим модуль Hello поставщика Acme:
app/code/Acme/Hello/
├── registration.php
└── etc/
└── module.xmlПолное имя модуля — Acme_Hello, а пространство имён его классов — Acme\Hello.
Файл registration.php
Создайте файл app/code/Acme/Hello/registration.php:
// app/code/Acme/Hello/registration.php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Acme_Hello', __DIR__);Файл сообщает Magento, что в этой папке находится модуль с именем Acme_Hello. В настоящем файле первой строкой стоит открывающий тег PHP.
Файл module.xml
Создайте файл app/code/Acme/Hello/etc/module.xml:
<?xml version="1.0"?>
<!-- app/code/Acme/Hello/etc/module.xml -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Acme_Hello"/>
</config>Файл объявляет модуль. Имя в атрибуте name должно совпадать с именем из registration.php.
Включение
bin/magento module:enable Acme_Hello
bin/magento setup:upgrade
bin/magento cache:cleanПервая команда записывает модуль в app/etc/config.php, вторая регистрирует его в базе данных, третья сбрасывает кеш.
Проверка
bin/magento module:status Acme_HelloКоманда печатает Acme_Hello : Module is enabled. Пока модуль ничего не делает — страницу он получит в следующих уроках.
Зависимости от других модулей
Если модуль использует или изменяет чужой модуль, это указывают в разделе sequence:
<module name="Acme_Hello">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>Теперь Magento_Catalog загружается раньше, и настройки Acme_Hello применяются поверх его настроек. После изменения sequence снова запускают bin/magento setup:upgrade.
Отключение
bin/magento module:disable Acme_HelloМодуль перестаёт загружаться, но его файлы и таблицы остаются на месте.
Частая ошибка
Файлы созданы, а модуль не работает и в списке module:status числится отключённым. Новый модуль не подхватывается сам: нужны module:enable и setup:upgrade. Вторая типичная причина — регистр букв: папка app/code/acme/hello и имя Acme_Hello на сервере с Linux не совпадут.