Urutan pemuatan Layout XML yang salah

15

Ketika saya membuat file tata letak untuk area admin (baik di komunitas atau kumpulan kode lokal), kadang-kadang Magento memuat tata letak xml di sebelum tata letak modul Adminhtml xml dimuat. Efeknya adalah bahwa panggilan referensi dibuang karena tidak ada blok yang dibuat untuk menerapkannya.

Jelas, caching tidak berperan di sini. Saya telah menambahkan Mage_Adminhtmldi <depends/>node dalam file deklarasi modul.

Apakah ini masalah yang pernah Anda alami sebelumnya? Jika demikian, bagaimana cara mengatasinya?

Saya telah menangani masalah ini beberapa kali, dan mendapatkan solusi setiap kali, tetapi saya tidak dapat menemukan apa yang menyebabkan hal ini terjadi.

Joseph di SwiftOtter
sumber

Jawaban:

16

Sulit untuk mengatakan tanpa contoh konkret, tapi saya curiga Anda menjalankan pesanan file vs menangani masalah pesanan.

Secara khusus, Magento memuat file XML-nya dalam urutan modul, dengan local.xmlmenempel pada yang terakhir. Berikut adalah daftar khasnya, secara berurutan

frontend/base/default/layout/core.xml
frontend/rwd/default/layout/page.xml
frontend/rwd/default/layout/directory.xml
frontend/rwd/default/layout/cms.xml
frontend/rwd/default/layout/customer.xml
frontend/rwd/default/layout/catalog.xml
frontend/rwd/default/layout/catalog_msrp.xml
frontend/rwd/default/layout/catalogsearch.xml
frontend/base/default/layout/payment.xml
frontend/rwd/default/layout/sales.xml
frontend/base/default/layout/sales/billing_agreement.xml
frontend/base/default/layout/sales/recurring_profile.xml
frontend/base/default/layout/cataloginventory.xml
frontend/base/default/layout/shipping.xml
frontend/rwd/default/layout/checkout.xml
frontend/rwd/default/layout/paypal.xml
frontend/base/default/layout/bml.xml
frontend/rwd/default/layout/poll.xml
frontend/rwd/default/layout/review.xml
frontend/rwd/default/layout/tag.xml
frontend/base/default/layout/reports.xml
frontend/base/default/layout/googleanalytics.xml
frontend/rwd/default/layout/wishlist.xml
frontend/base/default/layout/paypaluk.xml
frontend/base/default/layout/giftmessage.xml
frontend/rwd/default/layout/contacts.xml
frontend/base/default/layout/sendfriend.xml
frontend/rwd/default/layout/rss.xml
frontend/base/default/layout/productalert.xml
frontend/rwd/default/layout/oauth.xml
frontend/base/default/layout/authorizenet.xml
frontend/rwd/default/layout/bundle.xml
frontend/rwd/default/layout/captcha.xml
frontend/base/default/layout/centinel.xml
frontend/rwd/default/layout/newsletter.xml
frontend/rwd/default/layout/downloadable.xml
frontend/base/default/layout/pagecache.xml
frontend/rwd/default/layout/persistent.xml
frontend/base/default/layout/weee.xml
frontend/base/default/layout/xmlconnect.xml
frontend/base/default/layout/moneybookers.xml
frontend/base/default/layout/pulsestorm_checkoutstep.xml
frontend/rwd/default/layout/local.xml

Tata letak urutan file XML dimuat dalam menentukan tata letak urutan aturan XML diterapkan -  per pegangan . Bagian terakhir inilah yang membuat orang tersandung. Menangani adalah simpul XML tingkat atas itu.

<config>
    <handle_name>
    </handle_name>
</config>

Pegangan adalah semacam acara untuk tata letak - untuk setiap permintaan halaman Magento mengeluarkan sejumlah pegangan. Anda dapat menggunakan Bug Komersial untuk melihat pegangan mana yang dikeluarkan untuk permintaan halaman tertentu

masukkan deskripsi gambar di sini

Bagi mereka yang gambarnya dimatikan, pegangan yang dikeluarkan untuk permintaan halaman tertentu adalah

<default />
<catalog_category_layered_nochildren />
<STORE_default />
<THEME_frontend_rwd_default />
<catalog_category_view />
<catalog_category_default />
<CATEGORY_3 />

Artinya, Magento akan menjalankan setiap defaultpotongan XML: pertama untuk core.xmlfile, lalu setiap defaultpotongan untuk page.xmlfile, semua jalan sampai ke local.xml.

Kemudian, Magento akan menjalankan setiap catalog_category_layered_nochildrenpotongan XML: pertama untuk core.xmlfile, lalu untuk page.xmlfile, semua jalan ke bawah local.xml.

Ini berlanjut untuk setiap pegangan.

Apa ini artinya, jika Anda memiliki sedikit pembaruan tata letak XML di local.xmldalam defaultpegangan, itu akan berjalan sebelum sedikit pembaruan tata letak XML di core.xmldalamnya catalog_category_layered_nochildren. Sejauh ini, inilah hal yang paling membingungkan dalam tata letak sistem XML, terutama karena ada sedikit kearifan konvensional yang beredar yang mengatakan "local.xml memuat terakhir".

Jika hal di atas sedikit membingungkan Anda dan Anda perlu belajar lebih banyak tentang sistem XML Layout, saya masih berpikir buku saya No Frills Magento Layout adalah cara terbaik untuk mempelajari sistem luar-dalam.

Alan Storm
sumber