Система на Magento 2 состоит из нескольких типов компонентов: темы, модули, библиотеки, языковые пакеты. А фреймворк Magento 2 предлагает разработчикам готовый набор базовой логики, библиотек и PHP-кода, которые наследуются всеми компонентами системы.
Модули и темы Magento 2 используются в качестве элементов для кастомизации: модули предоставляют бизнес-логику, а темы предоставляют функции для настройки внешнего вида сайта. Модули могут зависеть друг от друга, а могут быть достаточно независимыми, чтобы обеспечивать максимальную гибкость настройки сайта.
Каждый модуль представляет собой логическую группу, которая состоит из Блоков, Помощников, Контроллеров, Моделей. Эта группа независима и предназначена для того, чтобы не влиять на другой функционал. Таким образом, при использовании модульного подхода, каждый модуль предоставляет свои собственные функции с минимальными зависимостями от других модулей, чтобы включение/отключение модуля не влияло на функциональность других модулей.
Модули Magento 2 размещаются в папке vendor/magento
(при установке через composer) или в app/code/Magento
(при ручной установке). Например, модуль Customer
можно найти в одном из этих мест: app/code/Magento/Customer
или vendor/magento/module-customer
. В этих папках содержится весь код и конфигурация, которые связаны с модулем.
Имя каждого модуля определяется в файле module.xml
, который находится в app/code/<Vendor>/<ModuleName>/etc/
. Вы должны именовать модуль в соответствии со следующей схемой Namespace_Module
: где Namespace – это имя поставщика модуля (разработчика), а Module – это имя модуля.
Минимальная информация, которая необходима для объявления модуля:
Пример минимального кода для декларации модуля:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Namespace_Module" setup_version="2.0.0"> </module> </config>
Концепция зависимостей играет очень важную роль в Magento 2: все модули собраны в логические группы с уникальными отдельными функциями. В таких условиях несколько модулей не могут отвечать за одну и ту же функцию. В то же время один модуль не может отвечать за различные функции в Magento 2. Для этого нужно объявлять все зависимости. Отключение и/или удаление модуля не приводит к отключению и/или удаление других модулей. Модули могут зависеть от таких компонентов, как другие модули, PHP расширения и библиотеки.
Задачи зависимостей модуля
Вы можете управлять зависимостями модуля с помощью 3-х шагов:
Все зависимости перечислены в файле composer.json
каждого модуля. Ниже пример использования:
app/code/Magento/Catalog/composer.json { "name": "magento/module-catalog", "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", "magento/module-store": "100.2.*", "magento/module-eav": "101.0.*", "magento/module-cms": "102.0.*", "magento/module-indexer": "100.2.*", … }, … }
Чтобы объявить порядок загрузки любых зависимостей, вы должны использовать элемент <sequence>
в файле module.xml
.
Нод <sequence>
является необязательным элементом, поэтому он используется только в тех случаях, когда необходим определенный порядок загрузки модулей.
Основной синтаксис:
<sequence> <module name="Vendor_Module"/> </sequence>
Пример использования
Файл: vendor/magento/module-customer/etc/module.xml <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Magento_Customer" setup_version="2.0.12"> <sequence> <module name="Magento_Eav"/> <module name="Magento_Directory"/> </sequence> </module> </config>
Элемент <sequence>
файла module.xml
используется только для определения порядка загрузки зависимостей. Вы должны использовать файл composer.json
, чтобы сделать фактические объявления зависимостей.
Внедрение зависимостей означает, что все зависимости передаются в объект, а не извлекаются из среды этим объектом.
Зависимость (или связь) подразумевает степень того, как один компонент полагается на некоторый другой компонент для выполнения своей функции. Чем больше степень зависимости компонента, тем меньше его переносимость в новые проекты.
Диспетчер объектов показывает среду зависимостей для внедрения в конструктор. Он должен использоваться только при написании кода.
Типы зависимостей модуля
В Magento есть два типа зависимостей модулей: жесткие и мягкие зависимости.
Следует помнить, что в случае, когда один модуль использует код из другого, он обязательно должен явно объявить зависимость.
Последовательность установки: сначала устанавливается модуль, который служит зависимостью для другого модуля, а затем – модуль, который полагается на него.
Модули определяют не только ресурсы, которые видны и доступны в области, но также и поведение области.
Magento состоит из следующих областей:
adminhtml
– отвечает за Панель администрирования Magento 2frontend
– отвечает за внешний интерфейс (Storefront)webapi_rest
– веб-API RESTwebapi_soap
– SOAP Web APIdoc
Каждая область со всеми конкретными ресурсами объявляет себя в определенном модуле. Можно включить и отключить область в модуле. С включенным модулем вы вводите маршрутизаторы области в процесс маршрутизации общего применения. При отключенном модуле маршрутизаторы области не загружаются, поэтому ресурсы и специальные функции области недоступны.
Имейте в виду, что модуль не должен зависеть от другой области модуля.
Magento использует области для эффективного вызова веб-служб – загружает зависимый код для этой области. Каждая область имеет свое собственное поведение и вид компонентов, которые работают отдельно.
Существуют специальные стандарты и соглашения в Magento 2, которые относятся к расположению модулей в файловой системе.
Правила расположения модулей
Вот как выглядит стандартная локализация для конкретных объектов:
Объект | Расположение |
База кода пользовательского модуля | app/code/<Vendor>/<Module> |
Файлы темы | app/design/<ОБЛАСТЬ>/<Module>/<theme> |
Файлы библиотек | lib/<Vendor_Library> |
Выбор мастера для ремонта и перетяжки мебели — задача, которая требует вдумчивого подхода. Ведь от…
Выбор идеального хостинга под свой сайт может быть довольно запутанным делом, особенно когда существует так…
Чтобы избегать ошибок, нужно набираться опыта; чтобы набираться опыта, надо делать ошибки Лоуренс Питер
Краткое определение Черного SEO Черное СЕО (или Черная оптимизация) — это любая практика, целью которой…
Получение водительских прав категории C открывает двери к профессиональной деятельности, связанной с управлением грузовыми автомобилями.…