Różnica między „stronami” i „układami” tagów głównych w Magento 2

18

W Magento 2 niektóre pliki XML obsługi układu otwierają się przy pomocy

<page.../>

znacznik root. Inne otwierają się przy pomocy

<layout.../>

znacznik root. Czy użycie któregokolwiek z powyższych znaczników wprowadza jakiekolwiek różnice w funkcjonalności pliku XML uchwytu układu? A może to czysty sos okienny? Lub coś pomiędzy.

Dwa przykłady

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

i

<!-- 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">
Alan Storm
źródło

Odpowiedzi:

13

Jest to ważne ze względu na różne konfiguracje XSD. The

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">

deklaracja mówi, że chcemy używać układu z definicją XSD podaną w

lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd

W layout_generic.xsdpliku podano definicję layoutwęzła z genericLayouttypem elementu.

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

Mając to, plik układu został sprawdzony przez XSD podczas ładowania xml. Oprócz tego wyróżnia wszystkie możliwe węzły i atrybuty węzłów w pliku layout.xml.

To samo z page_configuration.xsddefinicją dla <page />węzła. Ten XSD opisuje węzły, których można użyć do opisania strony.

Mam nadzieję, że to pomoże.

Max Pronko
źródło
2
kapelusz pomaga niektórym, +1 za to, ale wciąż nie jest jasne, dlaczego ta różnica istnieje. Czy układ jest po prostu nieprzekształconym dziedzictwem? Czy też rozróżnienie istnieje z ważnego powodu.
Alan Storm
1
Istnieje z jakiegoś powodu. Wyobraź sobie elastyczność, gdy zamiast tworzyć plik phtml lub html, a jeśli potrzebujesz modyfikacji istniejącego pliku, musisz go skopiować, masz deklaratywny sposób definiowania strony. Dzięki html, elementom ciała i głowy. Układ - to tylko kolejna, inna warstwa konfiguracji, w której
operujesz
1
Nie jestem pewien, czy widzę to rozróżnienie - czy wewnętrzne węzły <layout/>pliku nie mogą być uwzględnione w celu <page/> <body/>uzyskania tego samego efektu? A może coś mi brakuje?
Alan Storm
Traktuj to podejście jako oddzielne obawy. W tym wiele innych miejsc, w których Magento 2 dzieli klasy, konfigurację, układy itp.
Max Pronko
9

Pliki układu, które się otwierają, <layout></layout>to układy strony, które deklarują szkielet strony w <body>sekcji, na przykład układ jednokolumnowy lub układ dwukolumnowy.

Pliki układu, które otwierają się, <page></page>to pliki konfiguracji strony , które dodają treść do szkieletu zdefiniowanego w pliku układu strony.

Oto oficjalny dokument na ten temat, daj nam znać, czy można to poprawić: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html

Alex
źródło
Byłoby to o wiele łatwiejsze do zrozumienia, gdybyście wyjaśnili, tak jak to zrobili w odpowiedzi, że jeden otwiera się, <layout>a drugi <page>w tym artykule .
jamil
0

Jedną z różnic, które zauważyłem, jest to, że ponieważ jest to szkielet strony w ciele , możesz ajax pobrać tylko część HTML. Zwykle po naciśnięciu kontrolera cała strona zaczyna się od tagu. Te kontrolery zwracają obiekty strony utworzone przez PageFactory, która używa układu typu xml. Ale gdy chcesz dynamicznie ładować część phtml z wywołaniem ajax jak filtr, jest to pomocne. Magento_ImportExport dynamicznie zmienia filtry eksportu, gdy zmienia się jednostka (produkt, klient). To jest przykład użycia Magento (adminhtml_export_getfilter.xml).

Abhishek Jakhotiya
źródło