Magento 2: Apakah Tata Letak Dampak Urutan Modul Menangani Urutan Memuat XML?


11

Apakah <sequence/>tag dalam module.xmlfile memengaruhi urutan Magento akan memproses tata letak yang menangani file XML? Penelitian pendahuluan saya mengatakan tidak , tapi itu kelihatannya salah jadi saya mencari konfirmasi / bukti bahwa mereka tidak (bukti == poin kode sumber di mana tata letak menangani jalur file XML dihasilkan dan dimuat)

Jika tag urutan tidak memengaruhi tata letak menangani urutan pemuatan file XML - apakah ada cara untuk mengubah urutan modul tempat file ini dimuat?

Masalah khusus yang saya coba selesaikan adalah jika saya memiliki yang berikut dimuat sebelum wadah itu benar-benar diiklankan ke halaman

    <referenceContainer name="product.info.media">    
        <action method="unsetChild">
            <argument name="block" xsi:type="string">product.info.media.image</argument>
        </action>
    </referenceContainer>

Magento barfs.

Jawaban:


17

Urutan dalam module.xmlberdampak pada app/etc/config.php. File ini akan diperbarui ketika Anda menjalankannya bin/magento module:enable Vendor_ModuleNamejadi jika Anda telah menambahkan / mengubah urutan Saya sarankan menonaktifkan modul Anda dan kemudian mengaktifkannya kembali. Memperbarui module.xmlfile dan menghapus cache tidak cukup di sini, Anda harus melakukan daur disableulang penuh enableuntuk membuat Magento melihat perubahan urutan selama pengembangan.

Urutan modul di config.phpfile kemudian digunakan untuk semua memuat file konfigurasi lainnya sesuai komentar Anton di sini.

Lokasi kode dalam komentar itu agak ketinggalan zaman. Ini adalah kode untuk pengurutan berurutan https://github.com/magento/magento2/blob/2.0.2/lib/internal/Magento/Framework/Module/ModuleList/Loader.php#L131

Pembaruan 2:

app / etc / di.xml

<type name="Magento\Framework\View\Model\Layout\Merge">
    <arguments>
        <argument name="fileSource" xsi:type="object">Magento\Framework\View\Layout\File\Collector\Aggregated\Proxy</argument>
        <argument name="pageLayoutFileSource" xsi:type="object">pageLayoutFileCollectorAggregated</argument>
        <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Layout</argument>
    </arguments>
</type>

yang mereferensikan pengumpul file tata letak halaman di di.xml yang sama

<virtualType name="pageLayoutFileCollectorAggregated" type="Magento\Framework\View\Layout\File\Collector\Aggregated">
    <arguments>
        <argument name="baseFiles" xsi:type="object">pageLayoutFileSourceBaseSorted</argument>
        <argument name="themeFiles" xsi:type="object">pageLayoutFileSourceThemeSorted</argument>
        <argument name="overrideBaseFiles" xsi:type="object">pageLayoutFileSourceOverrideBaseSorted</argument>
        <argument name="overrideThemeFiles" xsi:type="object">pageLayoutFileSourceOverrideThemeSorted</argument>
    </arguments>
</virtualType>

yang terlihat menarik bagi kami pageLayoutFileSourceBaseSortedmasih di di.xml yang sama

<virtualType name="pageLayoutFileSourceBaseSorted" type="Magento\Framework\View\File\Collector\Decorator\ModuleDependency">
    <arguments>
        <argument name="subject" xsi:type="object">pageLayoutFileSourceBaseFiltered</argument>
    </arguments>
</virtualType>

Magento\Framework\View\File\Collector\Decorator\ModuleDependency melakukan penyortiran berikut

protected function getModulePriority($moduleName)
{
    if ($this->orderedModules === null) {
        $this->orderedModules = $this->moduleList->getNames();
    }
    $result = array_search($moduleName, $this->orderedModules);
    // Assume unknown modules have the same priority, distinctive from known modules
    if ($result === false) {
        return -1;
    }
    return $result;
}

di mana moduleListdidasarkan pada Magento\Framework\Module\ModuleListyang pada gilirannya menggunakan cara Loader yang disebutkan di atas.


2
Memberi +1 untuk informasi yang baik, tetapi sepertinya meninggalkan pertanyaan terbuka - apakah tata letak menangani file XML yang dianggap sebagai file konfigurasi, atau apakah itu sesuatu yang lain .
Alan Storm

3
Mengomentari untuk Google masa depan - pemuatan konfigurasi tidak mematuhi pengaturan urutan, tetapi urutan tidak diatur pada cache yang jelas, pengaturannya pada modul aktifkan / nonaktifkan.
Alan Storm

1
Penolong! Saya membawa saya cukup lama sebelum saya menyadari bahwa ini sedang terjadi.
Anton Evers

Dan bagaimana dengan tata letak-xml dalam tema (aplikasi / desain / AwesomeTheme / default / ..? Apakah semua tata letak-xml ini digabungkan setelah modul di lokasi vendor dan aplikasi / kode, dalam urutan yang sama seperti yang dijelaskan di atas?
Klaas van der Weij
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.