Differenza tra i tag radice "pagina" e "layout" in Magento 2


18

In Magento 2, alcuni layout gestiscono i file XML aperti con

<page.../>

tag radice. Altri si aprono con il

<layout.../>

tag radice. L'uso di uno dei tag sopra riportati introduce differenze di funzionalità in un file XML di gestione layout? O è questa pura vetrina? O qualcosa nel mezzo.

Due esempi

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

e

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

Risposte:


13

Questi aspetti sono dovuti a diverse configurazioni XSD. Il

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

dichiarazione afferma che vogliamo usare il layout con la definizione XSD fornita nella

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

Nel layout_generic.xsdfile fornisce la definizione per layoutnodo con genericLayouttipo di elemento.

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

Detto questo, il file di layout è stato convalidato dall'XSD quando viene caricato xml. Inoltre, evidenzia tutti i possibili nodi e attributi dei nodi nel file layout.xml.

Lo stesso con la page_configuration.xsddefinizione per il <page />nodo. Questo XSD descrive i nodi che possono essere usati per descrivere la pagina.

Spero che sia d'aiuto.


2
hat aiuta alcuni, +1 per quello, ma non è ancora chiaro il motivo per cui esiste la differenza. Il layout è solo un'eredità non convertita? O la distinzione esiste per una buona ragione.
Alan Storm,

1
Esiste per un motivo. Immagina flessibilità quando invece di creare file phtml o html e se hai bisogno di qualche modifica al file esistente devi copiarlo, hai un modo dichiarativo di definire una pagina. Con i suoi elementi html, body e head. Layout - è solo un altro, diverso livello di configurazione, in cui si opera con contenuti come blocco, componente, contenitore ecc.
Max Pronko

1
Non sono sicuro di vedere la distinzione: i nodi interni di un <layout/>file non possono essere inclusi in a <page/> <body/>per lo stesso effetto? Oppure mi sfugge qualcosa?
Alan Storm,

Considera questo approccio come una separazione delle preoccupazioni. Compresi molti altri posti in cui Magento 2 divide classi, configurazione, layout ecc.
Max Pronko,

9

I file di layout che si aprono con <layout></layout>sono layout di pagina che dichiarano il wireframe di una pagina all'interno della <body>sezione, ad esempio layout a una colonna o layout a due colonne.

I file di layout che si aprono con <page></page>sono file di configurazione della pagina che aggiungono contenuto al wireframe definito in un file di layout di pagina.

Ecco il documento ufficiale a riguardo, facci sapere se può essere migliorato: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html


Questo sarebbe molto più facile da capire se chiarissi, come hai fatto nella tua risposta, che uno si apre con <layout>e uno <page>su questo articolo .
Jamil,

0

Una differenza che ho notato è che, poiché è il wireframe di una pagina all'interno del corpo , è possibile recuperare solo una parte di HTML. Normalmente se si colpisce un controller si ottiene l'intera pagina che inizia con il tag. Questi controller stanno restituendo oggetti di pagina creati da PageFactory che utilizza il layout di tipo xml. Ma quando vuoi caricare in modo dinamico alcuni phtml con una chiamata ajax come un filtro, è utile. Magento_ImportExport cambia dinamicamente i filtri di esportazione quando cambia entità (prodotto, cliente). Questo è un esempio di quando usa magento (adminhtml_export_getfilter.xml).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.