ความแตกต่างระหว่าง“ เพจ” และ“ เลย์เอาต์” รูทแท็กใน 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>

หลังจากนั้นไฟล์เค้าโครงจะได้รับการตรวจสอบความถูกต้องโดย XSD เมื่อมีการโหลด xml นอกจากนี้ไฮไลต์โหนดและแอ็ตทริบิวต์โหนดที่เป็นไปได้ทั้งหมดในไฟล์ layout.xml

เหมือนกับpage_configuration.xsdนิยามสำหรับ<page />โหนด XSD นี้อธิบายถึงโหนดที่สามารถใช้เพื่ออธิบายหน้า

หวังว่ามันจะช่วย


2
หมวกช่วยได้ +1 สำหรับสิ่งนั้น แต่ก็ยังไม่ชัดเจนว่าทำไมความแตกต่างจึงมีอยู่ เลย์เอาต์นั้นไม่ได้รับการเปลี่ยนเป็นมรดกหรือไม่ หรือมีความแตกต่างด้วยเหตุผลที่ดี
Alan Storm

1
มันมีอยู่ด้วยเหตุผล เพียงจินตนาการถึงความยืดหยุ่นเมื่อแทนที่จะสร้างไฟล์ phtml หรือ html และหากคุณต้องการแก้ไขไฟล์ที่มีอยู่คุณต้องคัดลอกคุณจะมีวิธีการประกาศหน้าเว็บ ด้วยองค์ประกอบ HTML, เนื้อหาและส่วนหัว เลย์เอาต์ - เป็นอีกชั้นหนึ่งของการกำหนดค่าที่แตกต่างกันซึ่งคุณแสดงโอเปร่าด้วยชิ้นส่วนของเนื้อหาเช่นบล็อก, ส่วนประกอบ, ตู้คอนเทนเนอร์เป็นต้น
Max Pronko

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

ข้อแตกต่างอย่างหนึ่งที่ฉันสังเกตเห็นก็คือเนื่องจากเป็นโครงร่างของหน้าเว็บภายในเนื้อความคุณสามารถ ajax ดึงข้อมูลเพียงส่วนหนึ่งของ html โดยปกติหากคุณกดปุ่มควบคุมคุณจะได้รับทั้งหน้าเริ่มต้นด้วยแท็ก ตัวควบคุมเหล่านี้กำลังส่งคืนออบเจกต์เพจที่สร้างโดย PageFactory ซึ่งใช้ชนิดเลย์เอาต์ xml แต่เมื่อคุณต้องการโหลด phtml ด้วย ajax call เหมือนฟอร์มตัวกรองแบบไดนามิกจะเป็นประโยชน์ Magento_ImportExport เปลี่ยนฟิลเตอร์เอ็กซ์พอร์ตแบบไดนามิกเมื่อเอนทิตี (ผลิตภัณฑ์ลูกค้า) เปลี่ยนแปลง นี่คือตัวอย่างเมื่อ magento ใช้ (adminhtml_export_getfilter.xml)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.