Різниця між «сторінкою» та «компонуванням» кореневих тегів у Magento 2


18

У 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">

Відповіді:


13

Ці питання пояснюються різними конфігураціями XSD. The

<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 описує вузли, які можна використовувати для опису сторінки.

Сподіваюся, це допомагає.


2
капелюх допомагає деяким, +1 для цього, але все ще не ясно, чому різниця існує. Чи макет просто неперетворена спадщина? Або відмінність існує з вагомих причин.
Алан Шторм

1
Він існує з причини. Просто уявіть гнучкість, коли замість створення файлу phtml або html, і якщо вам потрібна якась модифікація до існуючого файлу, вам доведеться скопіювати його, у вас є декларативний спосіб визначення сторінки. З його елементами html, тіло та голова. Макет - це просто інший, інший шар конфігурації, де ви оперуєте фрагментами вмісту, такими як блок, компонент, контейнер тощо.
Макс Пронко

1
Не впевнений, що я бачу відмінність - чи не можуть внутрішні вузли <layout/>файлу бути включені в а <page/> <body/>для того ж ефекту? Або я щось пропускаю?
Алан Шторм

Розглянемо такий підхід як розділення проблем. У тому числі багато інших місць, де Magento 2 розділив класи, конфігурацію, макети тощо
Макс Пронко

9

Файли макета, які відкриваються, - <layout></layout>це макети сторінок, які оголошують каркасну сторінку сторінки всередині <body>розділу, наприклад, макет з одним стовпцем або макет з двома стовпцями.

Файли макета, які відкриваються, - <page></page>це файли конфігурації сторінок, які додають вміст до каркасної форми, визначеної у файлі макета сторінки.

Ось офіційний документ про це, будь ласка, повідомте нас, чи можна його вдосконалити: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html


Це було б набагато простіше зрозуміти, якби ви уточнили, як це зробили у своїй відповіді, що це відкриється з, <layout>а інше - <page>у цій статті .
джеміл

0

Одна з різниць, яку я помітив, полягає в тому, що це каркасна сторінка сторінки всередині тіла , ви можете ajax отримати лише частину html. Зазвичай якщо ви потрапили на контролер, ви отримуєте всю сторінку, починаючи з тегу. Ці контролери повертають об'єкти сторінки, створені PageFactory, який використовує макет типу xml. Але коли ви хочете динамічно завантажувати якийсь phtml за допомогою ajax call, як форма фільтра, це корисно. Magento_ImportExport динамічно змінює експортні фільтри, коли змінюється суб'єкт (продукт, замовник). Це приклад використання magento (adminhtml_export_getfilter.xml).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.