Encodera

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

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

Оглавление

Первый модуль

Модуль — папка с кодом и настройками, которую 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 не совпадут.

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

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