Unterschied zwischen "Seite" - und "Layout" -Stammtags in Magento 2

18

In Magento 2 öffnen einige Layout-Handles XML-Dateien mit dem

<page.../>

Root-Tag. Andere öffnen mit dem

<layout.../>

Root-Tag. Führt die Verwendung eines der oben genannten Tags zu Funktionsunterschieden bei einer XML-Datei für Layout-Handles? Oder ist das reine Schaufensterdekoration? Oder etwas dazwischen.

Zwei Beispiele

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

und

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

Antworten:

13

Dies ist auf unterschiedliche XSD-Konfigurationen zurückzuführen. Das

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

Die Erklärung besagt, dass wir das Layout mit der XSD-Definition verwenden möchten, die in der bereitgestellt wird

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

In der layout_generic.xsdDatei wird der layoutKnoten mit dem genericLayoutElementtyp definiert.

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

Nachdem dies geschehen ist, wurde die Layoutdatei beim Laden von XML von der XSD validiert. Darüber hinaus werden alle möglichen Knoten und Knotenattribute in der Datei layout.xml hervorgehoben.

Gleiches gilt für die page_configuration.xsdDefinition des <page />Knotens. Diese XSD beschreibt Knoten, die zur Beschreibung von Seiten verwendet werden können.

Ich hoffe es hilft.

Max Pronko
quelle
2
Das hilft einigem, +1 dafür, aber es ist immer noch nicht klar, warum der Unterschied besteht. Ist das Layout nur unkonvertiertes Erbe? Oder besteht die Unterscheidung aus einem guten Grund.
Alan Storm
1
Es existiert aus einem Grund. Stellen Sie sich Flexibilität vor, wenn Sie anstelle von HTML- oder HTML-Dateien Änderungen an vorhandenen Dateien vornehmen und diese kopieren müssen, um eine Seite zu definieren. Mit HTML, Body und Head Elementen. Layout - es ist nur eine andere, andere Konfigurationsebene, in der Sie mit Inhalten wie Block, Komponente, Container usw.
operieren
1
Nicht sicher, ob ich den Unterschied sehe - können die inneren Knoten einer <layout/>Datei nicht <page/> <body/>für denselben Effekt in a eingeschlossen werden? Oder vermisse ich etwas?
Alan Storm
Betrachten Sie diesen Ansatz als eine Trennung von Bedenken. Einschließlich vieler anderer Orte, an denen Magento 2 Klassen, Konfigurationen, Layouts usw.
aufteilte
9

Bei Layoutdateien, die mit geöffnet werden, handelt <layout></layout>es sich um Seitenlayouts , die den Drahtmodell einer Seite innerhalb des <body>Abschnitts deklarieren , z. B. ein einspaltiges oder zweispaltiges Layout.

Die mit geöffneten Layoutdateien <page></page>sind Seitenkonfigurationsdateien , die dem in einer Seitenlayoutdatei definierten Drahtmodell Inhalt hinzufügen.

Hier ist das offizielle Dokument, bitte lassen Sie uns wissen, ob es verbessert werden kann: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html

Alex
quelle
Das wäre viel einfacher zu verstehen, wenn man klären, wie Sie in Ihrer Antwort haben, dass man mit eröffnet <layout>und einem mit <page>auf diesem Artikel .
Jamil
0

Ein Unterschied , dass ich bemerkt habe ist, weil ist Drahtgitter- einer Seite innerhalb Körper , können Sie AJAX abrufen nur einen Teil html. Normalerweise beginnt die ganze Seite mit einem Tag, wenn Sie einen Controller ansteuern. Diese Controller geben von PageFactory erstellte Seitenobjekte zurück, die den Typ layout xml verwenden. Aber wenn Sie dynamisch einige PHP-Dateien mit Ajax-Aufruf wie Filterform laden möchten, ist dies hilfreich. Magento_ImportExport ändert die Exportfilter dynamisch, wenn sich die Entität (Produkt, Kunde) ändert. Dies ist ein Beispiel für die Verwendung von magento (adminhtml_export_getfilter.xml).

Abhishek Jakhotiya
quelle