Как создать простой модуль в Magento 2
В этом уроке мы создадим самый простой модуль в Magento 2. Это будет только каркас, который мы будем достраивать и развивать в дальнейших уроках.
Прежде чем мы начнем разработку простого модуля Magento 2, есть две вещи, о которых многие забывают:
- Отключить кеш Magento 2
Отключение кеша Magento 2 во время разработки поможет сэкономить время, потому что вам не нужно вручную очищать кеш каждый раз, когда вы вносите изменения в код.
Самый простой способ отключить кеш – перейти в Admin → System → Cache Management → выбрать все типы кеша и установить для них Disable.
Либо вы можете набрать в консоли следующую команду (как работать с консолью, вы можете посмотреть в этом уроке):
php bin/magento cache:disable
- Переведите Magento 2 в режим разработчика
Вы должны перевести Magento 2 в режим разработчика, что позволит вам видеть все ошибки во время разработки.
Для этого откройте консоль и из корня сайта выполните следующую команду:
php bin/magento deploy:mode:set developer
Создание каркаса для модуля в Magento 2
Если вы ранее работали с Magento версий 1.х, вы использовали среду разработки – core
, community
и local
, которые находились в папке app/code
. В Magento 2 больше нет такого понятия. Модули сгруппированы по пространству имен (Vendor) и помещены непосредственно в папку app/code
.
Поэтому наш первый шаг – создать папку модуля и необходимые файлы, которые нужны для регистрации модуля в платформе Magento 2.
- Создайте следующие папки:
app/code/Sebweo app/code/Sebweo/Helloworld
Папка Sebweo
– это пространство имен модулей (Vendor, т.е., производитель), а Helloworld
– это название самого модуля.
Примечание. Если у вас нет папки code
в папке app
, создайте ее вручную.
Чтобы создать самый простой модуль в Magento 2, нужны только два файла: module.xml
и registration.php
. Рассмотрим это дальше.
- Файл определения модуля – module.xml
Теперь, когда у нас есть папка с модулем, нам нужно создать файл module.xml
в папке app/code/Sebweo/Helloworld/etc
с таким содержимым:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Vendor_ModuleName" setup_version="1.0.0"> <sequence> <module name="Magento_Catalog"/> </sequence> </module> </config>
- Замените Vendor на свое пространство имен, в нашем примере – это
Sebweo
. А ModuleName на название модуля, в нашем примере – этоHelloworld
. - Значение в ноде
setup_version
указывает на текущую версию модуля. Вы можете использовать любое цифровое значение. - Значение в ноде
sequence
не является обязательным элементом. Его используют, когда ваш модуль зависит от других модулей в системе. В нашем примере модуль зависит от модуляMagento_Catalog
.
- Файл регистрации модуля – registration.php
Чтобы зарегистрировать модуль в системе, создайте файл registration.php
в папке app/code/Sebweo/Helloworld
с таким содержимым:
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Vendor_ModuleName', __DIR__ );
Замените Vendor на свое пространство имен, в нашем примере – это Sebweo
. А ModuleName на название модуля, в нашем примере – это Helloworld
.
- Очистка системы
Откройте консоль и из корня сайта с Magento 2 запустите следующую команду:
php bin/magento setup:upgrade
Если после этого вы откроете сайт в браузере и увидите, что слетели стили, тогда дополнительно выполните в консоли и такую команду:
php bin/magento setup:static-content:deploy
Если вы хотите убедиться, что ваш новый модуль был успешно установлен, вы можете открыть файл app/etc/config.php
и проверить, что в массиве есть ключ «Sebweo_Helloworld
», а значение для него должно быть установлено в 1
.
Также вы можете использовать следующую команду из консоли:
php bin/magento module:status
Эта команда покажет вам список всех модулей в системе.
Вот и все! Сегодня мы создали самый простой модуль для Magento 2. Он уже присутствует в системе, но пока ничего полезного не делает. В следующих уроках мы будем наполнять его полезным функционалом.