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

답변:


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이지만 그 차이가 존재하는 이유는 아직 명확하지 않습니다. 레이아웃은 변환되지 않은 레거시입니까? 또는 그 이유가 다른 이유가 있습니까?
Alan Storm

1
이유가 있습니다. phtml 또는 html 파일을 생성하는 대신 유연성을 상상하고 기존 파일을 수정해야 할 경우 파일을 복사해야합니다. 페이지를 정의하는 선언적인 방법이 있습니다. html, body 및 head 요소입니다. 레이아웃-블록, 컴포넌트, 컨테이너 등과 같은 컨텐츠로 작동하는 또 다른 구성 계층
일뿐입니다

1
차이점을 잘 모르겠습니다. <layout/>파일 의 내부 노드를 <page/> <body/>같은 효과에 포함시킬 수 없습니까? 아니면 뭔가 빠졌습니까?
Alan Storm

이 접근법을 우려의 분리로 고려하십시오. 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> 에서 시작한다는 것을 명확히하면 훨씬 이해하기 쉽습니다 .
jamil

0

내가 알았던 한 가지 차이점은 body 안에 페이지의 와이어 프레임이기 때문에 html의 일부만 ajax를 검색 할 수 있다는 것입니다. 일반적으로 컨트롤러에 충돌하면 태그로 시작하는 전체 페이지가 표시됩니다. 이 컨트롤러는 타입 레이아웃 xml을 사용하는 PageFactory에 의해 생성 된 페이지 객체를 반환합니다. 그러나 필터 양식과 같은 ajax 호출로 일부 phtml을 동적으로로드하려는 경우 도움이됩니다. Magento_ImportExport는 엔티티 (제품, 고객)가 변경 될 때 내보내기 필터를 동적으로 변경합니다. 이것은 magento가 (adminhtml_export_getfilter.xml)을 사용하는 경우의 예입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.