Perbedaan Antara "halaman" dan "tata letak" Root Tags di Magento 2

18

Di Magento 2, beberapa tata letak menangani file XML terbuka dengan

<page.../>

tag root. Lainnya terbuka dengan

<layout.../>

tag root. Apakah menggunakan salah satu dari tag di atas memperkenalkan perbedaan fungsionalitas pada tata letak yang menangani file XML? Atau apakah ini murni etalase? Atau sesuatu di antaranya.

Dua contoh

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

dan

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

Jawaban:

13

Hal-hal ini disebabkan konfigurasi XSD yang berbeda. Itu

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

deklarasi mengatakan bahwa kami ingin menggunakan tata letak dengan definisi XSD yang disediakan di

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

Dalam layout_generic.xsdfile itu memberikan definisi untuk layoutsimpul dengan genericLayouttipe elemen.

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

Karena itu, file tata letak telah divalidasi oleh XSD ketika xml dimuat. Selain itu, ini menyoroti semua kemungkinan atribut node dan simpul dalam file layout.xml.

Sama dengan page_configuration.xsddefinisi untuk <page />simpul. XSD ini menjelaskan node yang dapat digunakan untuk menggambarkan halaman.

Semoga ini bisa membantu.

Max Pronko
sumber
2
Beberapa membantu, memberi +1 untuk itu, tetapi masih belum jelas mengapa perbedaan itu ada. Apakah tata letak hanya warisan yang belum dikonversi? Atau apakah perbedaan itu ada karena alasan yang bagus.
Alan Storm
1
Itu ada karena suatu alasan. Bayangkan saja fleksibilitas ketika alih-alih membuat file phtml atau html dan jika Anda perlu modifikasi pada file yang sudah ada, Anda harus menyalinnya, Anda memiliki cara deklaratif untuk mendefinisikan halaman. Dengan elemen html, tubuh, dan kepala. Layout - ini hanyalah lapisan konfigurasi yang berbeda, tempat Anda bermain dengan potongan konten seperti blok, komponen, wadah, dll.
Max Pronko
1
Tidak yakin saya melihat perbedaannya - tidak bisakah simpul bagian dalam <layout/>file dimasukkan dalam <page/> <body/>untuk efek yang sama? Atau apakah saya melewatkan sesuatu?
Alan Storm
Anggap pendekatan ini sebagai pemisahan kekhawatiran. Termasuk banyak tempat lain di mana Magento 2 membagi kelas, konfigurasi, tata letak, dll.
Max Pronko
9

File tata letak yang terbuka <layout></layout>adalah tata letak halaman yang menyatakan bingkai gambar suatu halaman di dalam <body>bagian, misalnya tata letak satu kolom atau tata letak dua kolom.

File tata letak yang terbuka <page></page>adalah file konfigurasi halaman yang menambahkan konten ke gambar rangka yang ditentukan dalam file tata letak halaman.

Berikut ini adalah dokumen resmi tentang hal itu, beri tahu kami jika dapat diperbaiki: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html

Alex
sumber
Ini akan jauh lebih mudah untuk dipahami jika Anda mengklarifikasi, seperti yang Anda lakukan dalam respons Anda, yang dibuka bersama <layout>dan satu dengan <page>pada artikel ini .
jamil
0

Salah satu perbedaan yang saya perhatikan adalah, karena bingkai gambar dari halaman di dalam tubuh , Anda dapat ajax mengambil hanya sebagian dari html. Biasanya jika Anda menekan controller Anda mendapatkan seluruh halaman dimulai dengan tag. Pengontrol ini mengembalikan objek halaman yang dibuat oleh PageFactory yang menggunakan tipe layout xml. Tetapi ketika Anda ingin secara dinamis memuat beberapa phtml dengan panggilan ajax seperti bentuk filter, ini sangat membantu. Magento_ImportExport secara dinamis mengubah filter ekspor ketika entitas (produk, pelanggan) berubah. Ini adalah contoh kapan magento menggunakan (adminhtml_export_getfilter.xml).

Abhishek Jakhotiya
sumber