Magento 2の「ページ」と「レイアウト」のルートタグの違い


18

Magento 2では、いくつかのレイアウトは、

<page.../>

ルートタグ。その他で開く

<layout.../>

ルートタグ。上記のタグのいずれかを使用すると、レイアウトハンドルXMLファイルに機能の違いが生じますか?それとも、この純粋な窓のドレッシングですか?またはその間に何か。

2つの例

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

回答:


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の要素です。レイアウト-それは、ブロック、コンポーネント、コンテナなどのコンテンツの断片を操作する、別の異なる構成層です。
Max Pronko

1
私は区別がわかりません- <layout/>ファイルの内部ノードを<page/> <body/>同じ効果のために含めることはできませんか?それとも何か不足していますか?
アランストーム

このアプローチを懸念の分離と考えてください。Magento 2がクラス、構成、レイアウトなどを分割する他の多くの場所を含む
Max Pronko

9

で開くレイアウトファイル<layout></layout>は、セクション内のページのワイヤフレームを宣言するページレイアウトです(<body>1列レイアウトや2列レイアウトなど)。

開くレイアウトファイルが<page></page>あるページの設定ページレイアウトファイルで定義されたワイヤフレームにコンテンツを追加したファイル。

これについての公式ドキュメントがあります。改善できるかどうかをお知らせください:http : //devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html


あなたが明確ならば、あなたの応答で行ったようにこれは、1つはで開くことを、理解することが非常に簡単になる<layout>と1と<page>この記事
ジャミル

0

私が気づいた違いの1つは、body内のページのワイヤフレームであるため、htmlの一部だけをajaxで取得できることです。通常、コントローラーにヒットすると、タグで始まるページ全体が表示されます。これらのコントローラーは、タイプレイアウトxmlを使用するPageFactoryによって作成されたページオブジェクトを返します。しかし、フィルター形式のようなajax呼び出しでphtmlを動的にロードしたい場合は便利です。Magento_ImportExportは、エンティティ(製品、顧客)が変更されると、エクスポートフィルターを動的に変更します。これは、magentoが(adminhtml_export_getfilter.xml)を使用する場合の例です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.