В сегодняшней статье мы посмотрим на изменения системы шаблонов в Мадженто 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>
Надеемся, что информация из данного урока была для вас полезной!
В последние годы интерес к саунам в Киеве заметно вырос. Это связано не только с…
В современном ритме мегаполиса отдых стал неотъемлемой частью заботы о здоровье и эмоциональном состоянии. Особенно…
В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…
Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…
Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…
В 2025 году конкуренция в e-commerce стала жесткой как никогда. Клиенты выбирают не только по…