Основна інформація про нову структуру в Magento 2
У сьогоднішній статті ми подивимося на зміни системи шаблонів в Мадженто 2. Дані зміни не надто радикальні, в порівнянні з Magento 1.x версіями, але можуть дезорієнтувати новачків.
Одним з найбільших відмінностей між старими і новими версіями Magento є спосіб структурування всього проекту. В Magento 1.x шаблони були визначені в app/design/frontend/<ПАКЕТ>/<ТЕМА>
, а всі ресурси теми були визначені в skin/frontend/<ПАКЕТ>/<ТЕМА>
, в Magento 2 все це об’єднано в одній базовій папці. Тепер всі шаблони і ресурси зберігаються в: app/design/frontend/<ПАКЕТ>/<ТЕМА>
.
Для прикладу ви можете відкрити «чисту» тему в Мадженто 2 (blank). Вона розташована в app/design/frontend/Magento/blank/
(або в app/vendor/magento/theme-frontend-blank/
, якщо ви встановлювали двигун через Composer). Ви побачите велику кількість папок, кожна з яких представляє собою модуль в Magento 2, шаблони або ресурси яких перевизначаються в цій темі.
Якщо ви хочете перевизначити/змінити шаблони основних модулів або їх ресурси, вам потрібно буде створити еквівалентну папку модуля у своїй темі, яка відповідає шляху файлу, який ви хочете перевизначити/розширити.
Наприклад, якщо ви хочете перевизначити щось в модулі Catalog, вам необхідно створити папку в своїй темі Magento_Catalog
. Дане ім’я посилається на <пакет_модуль>
, в даному випадку перша частина назви – Magento
– посилається на app/code/Magento
, а друга частина після підкреслення посилається на назву модуля. У нашому випадку це Catalog
.
Тобто, щоб перевизначити вміст модуля в app/code/<ПАКЕТ>/<МОДУЛЬ>
вам потрібно буде створити папку з назвою <ПАКЕТ>_<МОДУЛЬ>
в своїй темі, наприклад, app/design/frontend/<ПАКЕТ>/<ТЕМА>/Magento_Catalog
.
Також зверніть увагу, що ви можете перевизначати вміст лише частини view/frontend
модуля в своїй темі. Якщо вам потрібно перевизначити Контролери та Блоки, це робиться в іншому місці (це ми розглянемо в окремому уроці).
Визначення власних шаблонів в темі
Створення блоків і шаблонів трохи схоже на те, як це робилося в Magento 1.x. В Magento 2 для створення нового шаблону, також потрібно визначати Блок, наприклад:
<block class="Magento\Framework\View\Element\Template" name="custom.block.name" template="Magento_Theme::vash-shablon.phtml" before="-" />
Зверніть увагу на тег class
, який пов’язаний з визначенням Блоку. В даному прикладі використовується той тип класу, який потрібен при створенні стандартного Блоку, який не вимагає додаткової функціональності і призначений тільки для контенту з грубо прописаним кодом. Якщо вам потрібно зв’язати Блок з іншим класом, ви вказуєте його в цьому тезі.
Зверніть увагу на новий синтаксис атрибуту template
:
Magento_Theme::vash-shablon.phtml
Це скорочений синтаксис для посилання на папку шаблонів в певному модулі (в даному випадку Magento_Theme
). Іншими словами, це посилання веде на файл vash-shablon.phtml
в наступному місці: app/design/frontend/ПАКЕТ/ТЕМА/Magento_Theme/templates/
.
Якщо редагований XML-файл макета вже знаходиться в тому ж модулі, що і шаблон, який ви викликаєте, ви можете пропустити визначення модуля і просто викликати шаблон таким чином:
template="vash-shablon.phtml"
Це буде посилання на папку templates
в модулі, де розташований файл макета XML. Якщо ви хочете розмістити Блок в іншому Блоці або Контейнері, ви можете вказати це у визначенні батьківського Блоку або Контейнеру, або ж ви можете використовувати методи referenceBlock
або referenceContainer
.
<referenceContainer name="main.content"> <block class="Magento\Framework\View\Element\Template" name="custom.block.name" template="Magento_Theme::vash-shablon.phtml" before="-" /> </referenceContainer>
Сподіваємося, що інформація з даного уроку була для вас корисною!