Magento 2: создаём свои layout-хендлеры (сustom layout handles)
До сих пор мы рассматривали модуль Magento_Theme, который определяет основные макеты страниц (core page layouts), контейнеры(containers), макеты и блоки (layouts & blocks). Они определяют корневую основу макетов страниц, но с помощью модулеё её можно расширить.
Перейдем к модулю Magento_Wishlist в vendor/magento/module-wishlist
. Этот модуль контролирует, какие продукты были добавлены в список желаний клиента. Перейдя к view/frontend/layout
, мы увидим много layout XML-файлов-макетов.
Важно обратить внимание что имена этих файлов соответсвуют особому соглашению. Мы ранее узнали, что фаил-макет default.xml
применяется ко всем страницам в Magento, но остальные файлы-макеты (а каталоге layout
) предназначены либо для определенных страниц, либо для определенных типов страниц, а их имена называются «дескрипторами макета»(«layout handles»).
Дескрипторы макета (layout handles) по умолчанию связаны с URL-адресом Magento. Они определяются аналогично тому, как определяются контроллеры, по сути, это версия самого обычного URL в нижнем регистре но в snake-case (змеином стиле). Например, этот файл checkout_cart_index.xml
нацелен на URL /checkout/cart/index
или (что то-же самое) /checkout/cart/
), где:
checkout - так называемый route id (который указывается в VendorName/ModuleName/etc/frontend/routes.xml)
cart - имя контроллера (controllerName);
index - имя экшена (actionName)
Важно понять и запомнить следующее:
отсутствие controllerName или actionName в строке запроса - Magento 2 расценивает как controllerName = Index или actionName = Index соответственно, что в нашем случае позволяет опустить слово "index" в запросе,
то есть: /checkout/cart/index
= /checkout/cart/
также, как например:
/checkout/index/index
= /checkout/
(а фаил макета (layout) в таком случае будет называться checkout_index_index.xml
)
Таким образом, когда соответствующая этому URL страница корзины загружается, для этой страницы применяется соответствующий XML-файл макета, и отображает содержащиеся в нём блоки.
Как и default.xml
, имена дескрипторов макета могут быть настроены для различных целей.
Например:
wishlist_index_configure_type_configurableнацелен только на configurable products (настраиваемые продукты) для URL-адреса:
wishlist/index/configure