IT-Storm

Всегда пиши код так, как будто человек, который будет его саппортить — психопат-убийца, который знает, где ты живешь

Menu

Magento 2: создаём свои layout-хендлеры (сustom layout handles)

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

Magento 2