Система в 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> |
Якщо хочеш пізнати людину, не слухай, що про неї говорять інші, послухай, що вона говорить…
Вибачення — не означає, що ти не правий, а інша людина має рацію. Це всього…
Атмосферу паперової книги, запах свіжого чорнила і паперу, що трохи залежався, складно замінити гаджетами. Але…