Magento 2中“页面”和“布局”根标签之间的区别


18

在Magento 2中,一些布局句柄XML文件使用

<page.../>

根标签。其他人打开

<layout.../>

根标签。使用以上两个标签之一是否会对布局句柄XML文件引入任何功能差异?还是这个纯净的橱窗装饰?或介于两者之间。

两个例子

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

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

Answers:


13

由于不同的XSD配置,这些很重要。的

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

声明说我们要使用布局与XSD定义一起提供

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

layout_generic.xsd文件中,它为元素类型的layout节点提供了定义genericLayout

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

有了这个,布局文件已经在加载xml时由XSD验证。除此之外,它还突出显示了layout.xml文件中所有可能的节点和节点属性。

与节点page_configuration.xsd定义相同<page />。该XSD描述了可用于描述页面的节点。

希望能帮助到你。


2
帽子可以帮上忙,+ 1可以帮上忙,但仍不清楚为什么存在这种差异。布局只是未转换的遗产吗?还是存在区别是有充分理由的。
艾伦·斯托姆

1
它存在是有原因的。试想一下灵活性,而不是创建phtml或html文件,并且如果您需要对现有文件进行一些修改而必须将其复制,则可以使用声明性的方式来定义页面。带有html,body和head元素。布局-它仅仅是另一个,不同的层构成的,在这里用歌剧等内容的片断块,组件,容器等
最大Pronko

1
不确定我是否知道区别-不能在<layout/>文件中包含内部节点<page/> <body/>以达到相同的效果吗?还是我错过了什么?
艾伦·风暴

将此方法视为关注点分离。包括Magento 2拆分类,配置,布局等的许多其他地方
Max Pronko

9

打开时使用的布局文件<layout></layout>页面布局,用于声明<body>节内页面的线框,例如,一列布局或两列布局。

打开的布局文件<page></page>页面配置文件,可将内容添加到页面布局文件中定义的线框。

这是关于它的官方文档,如果可以改进,请告诉我们:http : //devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html


这将是一个更容易理解,如果你澄清,因为你在你的反应一样,就是一个与打开<layout>和一个用<page>这篇文章
贾米尔,2016年

0

我注意到的一个区别是,由于body内部页面的线框,您可以用ajax检索html的一部分。通常,如果您按了某个控制器,则整个页面都以标签开头。这些控制器将返回由PageFactory使用类型布局xml创建的页面对象。但是,当您想通过ajax调用动态加载某些phtml(例如过滤器表单)时,会很有帮助。当实体(产品,客户)更改时,Magento_ImportExport会动态更改导出过滤器。这是magento使用(adminhtml_export_getfilter.xml)的示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.