Diferença entre as tags raiz "página" e "layout" no Magento 2

18

No Magento 2, alguns layouts manipulam arquivos XML abertos com o

<page.../>

etiqueta raiz. Outros abrem com o

<layout.../>

etiqueta raiz. O uso de uma das tags acima introduz diferenças de funcionalidade em um arquivo XML de manipulador de layout? Ou isso é pura limpeza de janela? Ou algo no meio.

Dois exemplos

<!-- 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">
Alan Storm
fonte

Respostas:

13

Isso é devido a configurações XSD diferentes. o

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

A declaração diz que queremos usar o layout com a definição XSD fornecida no

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

No layout_generic.xsdarquivo, fornece definição para o layoutnó com o genericLayouttipo de 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>

Sendo assim, o arquivo de layout foi validado pelo XSD quando o xml é carregado. Além disso, destaca todos os nós e atributos de nó possíveis no arquivo layout.xml.

O mesmo com a page_configuration.xsddefinição para o <page />nó. Este XSD descreve nós que podem ser usados ​​para descrever a página.

Espero que ajude.

Max Pronko
fonte
2
Isso ajuda alguns, +1 para isso, mas ainda não está claro por que a diferença existe. O layout é apenas um legado não convertido? Ou a distinção existe por uma boa razão.
Alan Storm
11
Existe por uma razão. Imagine flexibilidade quando, em vez de criar arquivos phtml ou html, e se você precisar de alguma modificação no arquivo existente, precisará copiá-lo, tenha uma maneira declarativa de definir uma página. Com seus elementos html, body e head. Layout - é apenas outra camada diferente de configuração, onde você opera com partes do conteúdo, como bloco, componente, contêiner, etc.
Max Pronko
11
Não tenho certeza se vejo a distinção - os nós internos de um <layout/>arquivo não podem ser incluídos em um arquivo <page/> <body/>para o mesmo efeito? Ou eu estou esquecendo de alguma coisa?
Alan Storm
Considere essa abordagem como uma separação de preocupações. Incluindo muitos outros lugares onde o Magento 2 dividiu classes, configurações, layouts etc.
Max Pronko 16/01/16
9

Os arquivos de layout que abrem <layout></layout>são layouts de página que declaram o wireframe de uma página dentro da <body>seção, por exemplo, layout de uma coluna ou layout de duas colunas.

Os arquivos de layout que abrem <page></page>são arquivos de configuração de página que adicionam conteúdo ao wireframe definido em um arquivo de layout de página.

Aqui está o documento oficial sobre o assunto, informe-nos se ele pode ser melhorado: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html

Alex
fonte
Isso seria muito mais fácil de entender se você esclarecidas, como você fez na sua resposta, que se abre com <layout>e outra com <page>a este artigo .
21950
0

Uma diferença que eu notei é que, como o wireframe de uma página dentro do corpo , é possível recuperar o ajax apenas uma parte do html. Normalmente, se você acertar um controlador, você obtém a página inteira começando com tag. Esses controladores estão retornando objetos de página criados pelo PageFactory, que usa o tipo layout xml. Mas quando você deseja carregar dinamicamente algum phtml com chamada ajax, como formulário de filtro, é útil. Magento_ImportExport altera dinamicamente os filtros de exportação quando a entidade (produto, cliente) é alterada. Este é um exemplo de quando o magento usa (adminhtml_export_getfilter.xml).

Abhishek Jakhotiya
fonte