Модулі у файловій структурі Magento 2
Файли модулів у Magento 2 розміщені у 2-х директоріях.
1. app/code/<VendorName>/<ModuleName>/ 2. vendor/<vendor-name>/<module-name>/
Vendor Name - назва компанії/особи, що розробляє модуль. У перекладі з англійської "vendor"- постачальник. У деяких випадках назва вендора може співпадати з назвою компанії замовника. Тому перед початком розробки нового модуля її варто узгодити. У прикладах ми послуговуємося своєю назвою - Magefan..
Файли модулів, розроблені на замовлення чи модулі від інших компаній, встановлені за допомогою FTP, розміщені у папці app/code.
У папці vendor розміщені модулі ядра Magento 2, а також модулі, які встановлені за допомогою Web Setup Wizard чи Composer. Модулі ядра Magento ви знайдете у папці vendor/magento.
Цікаво знати:
У репозиторії Magento 2 (dev вітка) на GitHub (https://github.com/magento/magento2) усі модулі ядра знаходяться у папці app/code/Magento, а усі PHP бібліотеки у lib/internal/Magento. Ця структура використовувалася під час розробки Magento 2, задовго до офіційного релізу та існування папки vendor. Для зручності ця структура і досі застосовується на GitHub.
Структура модуля Magento 2
├── Api // PHP інтерфейси ├── Block // PHP класи вигляду (view), у термінології MVC. Вони містять методи, які використовуються у .phtml шаблонах (templates); │ ├── Adminhtml // view-класи адмін-панелі; │ └── SomeBlock.php // view-клас (block) який використовується на вітрині (storefront); │ ├── Controller // PHP контролер-класи (частина MVC); │ └── Adminhtml // контролер-класи, що застосовуються в адмін-панелі; │ ├── Cron // PHP класи, методи яких викликаються при виконанні cron-задач;
├── Helper // PHP класи з допоміжною логікою. Їхні методи використовуються у різних частинах модуля; ├── Model // PHP класи моделей (частина MVC); ├── Observer // PHP класи слухачів (обсерверів); ├── Plugin // PHP класи перехоплювачів (interceptors); ├── Setup // PHP класи які використовуються при встановленні, оновленні та видаленні модуля, дозволяють змінювати дані та структуру бази даних; ├── UI // PHP класи, що працюютьз UI-компонентами; ├── etc // конфігураційні файли модуля; │ ├── adminhtml // конфігураційні файли, які відносятся лише до адмін-панелі; │ │ ├── admingws.xml // відповідає за розмежування прав на рівні Store View (використовується лише у Enterprise версії (EE) Magento 2); │ │ ├── di.xml // налаштування плагінів, віртуальних типів, переписування моделей.; │ │ ├── menu.xml // відповідає за побудову меню; │ │ ├── routers.xml // налаштування роутів; │ │ ├── system.xml // побудова сторінки налаштувань Stores > Configuration; │ │ └── events.xml //налаштування слухачів (observers); │ │ │ ├── frontend // конфігураційні файли,що належать вітрині;
│ │ ├── di.xml │ │ ├── events.xml │ │ ├── routers.xml │ │ └── events.xml │ │ │ ├── acl.xml // налаштування розмежування прав у адмін-панелі; │ ├── config.xml // значення по замовчуванню для полів у Stores > Configuration;
│ ├── crontab.xml // налаштування cron-задач; │ ├── di.xml │ ├── webapi.xml // налаштування REST API; │ └── widget.xml // налаштування віджетів; │ ├── i18n // CSV-файли локалізації; │ ├── en_US.csv │ └── uk_UA.csv │ ├── view // файли вигляду: макети, темплейти, js, css, html, зображення, шрифти; │ ├── adminhtml // файли задіяні в адмін-панелі; │ ├── frontend // файли задіяні на вітрині; │ │ └── layout // xml-файли макету; │ │ └── templates // phtml-файли шаблону; │ │ └── web // статичні файли; │ │ └── css │ │ └── images │ │ └── js │ │
│ └── base // view-файли, які використовуються на вітрині та адмін-панелі;
│ ├── LICENSE.txt // файл з описом ліцензії, згідно якої використовується модуль; ├── README.md // опис функціональності модуля; ├── composer.json // файл, що дозволяє в подальшому встановлювати модуль через composer; └── registration.php // файл, що реєструє модуль у системі;
Така структура не містить усіх можливих директорій і файлів, що можуть знаходитись у модулі Magento 2. Вона лише відображає часто використовувані компоненти модуля.
Структуру Magento 2 модулів можна дослідити й самостійно. Для цього слід звернути увагу на модулі:
- Magento_Cms (vendor/magento/module-cms)
- Magento_Catalog (vendor/magento/module-catalog)