Différence entre les balises racine «page» et «mise en page» dans Magento 2


18

Dans Magento 2, certaines mises en page gèrent les fichiers XML ouverts avec le

<page.../>

balise racine. D'autres ouvrent avec le

<layout.../>

balise racine. L'utilisation de l'une des balises ci-dessus introduit-elle des différences de fonctionnalité dans un fichier XML de descripteur de mise en page? Ou est-ce un pur dressing? Ou quelque chose entre les deux.

Deux exemples

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

et

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

Réponses:


13

Ces questions sont dues à une configuration XSD différente. le

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

déclaration dit que nous voulons utiliser la mise en page avec la définition XSD fournie dans le

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

Dans le layout_generic.xsdfichier, il fournit la définition du layoutnœud avec le genericLayouttype d'élément.

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

Ayant cela, le fichier de mise en page a été validé par le XSD lorsque xml est chargé. En plus de cela, il met en évidence tous les nœuds et attributs de nœud possibles dans le fichier layout.xml.

Idem avec la page_configuration.xsddéfinition du <page />nœud. Ce XSD décrit les nœuds qui peuvent être utilisés pour décrire la page.

J'espère que cela aide.


2
chapeau aide certains, +1 pour cela, mais on ne sait toujours pas pourquoi la différence existe. La mise en page est-elle simplement un héritage non converti? Ou la distinction existe-t-elle pour une bonne raison.
Alan Storm

1
Il existe pour une raison. Imaginez simplement de la flexibilité lorsque, au lieu de créer un fichier phtml ou html et si vous avez besoin d'une modification du fichier existant, vous devez le copier, vous avez un moyen déclaratif de définir une page. Avec ses éléments html, body et head. Disposition - c'est juste une autre couche de configuration différente, où vous opérez avec des éléments de contenu tels que des blocs, des composants, des conteneurs, etc.
Max Pronko

1
Je ne suis pas sûr de voir la distinction - les nœuds internes d'un <layout/>fichier ne peuvent-ils pas être inclus dans un <page/> <body/>pour le même effet? Ou est-ce que je manque quelque chose?
Alan Storm

Considérez cette approche comme une séparation des préoccupations. Y compris de nombreux autres endroits où Magento 2 répartit les classes, la configuration, les dispositions, etc.
Max Pronko

9

Les fichiers de mise en page qui s'ouvrent avec <layout></layout>sont des mises en page qui déclarent le filaire d'une page à l'intérieur de la <body>section, par exemple une mise en page à une colonne ou à deux colonnes.

Les fichiers de mise en page qui s'ouvrent avec <page></page>sont des fichiers de configuration de page qui ajoutent du contenu au filaire défini dans un fichier de mise en page.

Voici le document officiel à ce sujet, veuillez nous faire savoir s'il peut être amélioré: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html


Ce serait beaucoup plus facile à comprendre si vous clarifiez, comme vous l'avez fait dans votre réponse, que l'on ouvre avec <layout>et l'autre avec <page>sur cet article .
jamil

0

Une différence que j'ai remarquée est que, parce que c'est le filaire d'une page à l'intérieur du corps , vous pouvez ajax récupérer juste une partie du html. Normalement, si vous frappez un contrôleur, vous obtenez la page entière commençant par la balise. Ces contrôleurs retournent des objets de page créés par PageFactory qui utilise le type layout xml. Mais lorsque vous voulez charger dynamiquement du phtml avec un appel ajax comme un filtre, c'est utile. Magento_ImportExport modifie dynamiquement les filtres d'exportation lorsque l'entité (produit, client) change. Ceci est un exemple d'utilisation de magento (adminhtml_export_getfilter.xml).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.