Разница между корневыми тегами "страница" и "макет" в Magento 2
В Magento 2 некоторые макеты обрабатывают XML-файлы, открытые с помощью
<page.../>
Корневой тег. Другие открываются с помощью
<layout.../>
Корневой тег. Приводит ли использование любого из вышеперечисленных тегов к каким-либо функциональным различиям в XML-файле обработки макета? Или это чистая показуха? Или что-то среднее.
Два примера
<!-- File: vendor/magento/module-weee/view/frontend/layout/default.xml -->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
И
<!-- File: vendor/magento/module-widget/view/adminhtml/layout/adminhtml_widget_loadoptions.xml -->
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
3 answers
Эти вопросы связаны с различными конфигурациями XSD.
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
В объявлении говорится, что мы хотим использовать макет с определением XSD, представленным в
lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd
В файле layout_generic.xsd
он предоставляет определение для узла layout
с типом элемента genericLayout
.
<xs:complexType name="genericLayout">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="referenceContainer" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="container" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="block" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="referenceBlock" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="update" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="move" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="uiComponent" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Имея это, файл макета был проверен XSD при загрузке xml. В дополнение к этому он выделяет все возможные узлы и атрибуты узлов в layout.xml файл.
То же самое с page_configuration.xsd
определение для узла <page />
. Этот XSD описывает узлы, которые можно использовать для описания страницы.
Надеюсь, это поможет.
Файлы макетов, которые открываются с помощью <layout></layout>
, являются макетами страниц , которые объявляют каркас страницы внутри раздела <body>
, например, макет с одним столбцом или макет с двумя столбцами.
Файлы макета, которые открываются с помощью <page></page>
, являются файлами конфигурации страницы , которые добавляют содержимое в каркас, определенный в файле макета страницы.
Вот официальный документ об этом, пожалуйста, сообщите нам, может ли это быть улучшенный: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html
Одно из различий, которое я заметил, заключается в том, что каркас страницы внутри тела, вы можете получить ajax только часть html. Обычно, если вы нажмете на контроллер, вы получите всю страницу, начинающуюся с тега. Эти контроллеры возвращают объекты страниц, созданные PageFactory, который использует xml-формат типа. Но когда вы хотите динамически загружать некоторые phtml с помощью ajax-вызова, например, формы фильтра, это полезно. Magento_ImportExport динамически изменяет фильтры экспорта, когда сущность (продукт, клиент) изменения. Это пример того, когда magento использует (adminhtml_export_getfilter.xml).