Основная информация о новой структуре в 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>
Надеемся, что информация из данного урока была для вас полезной!