Niepoprawna kolejność ładowania Layout XML

15

Kiedy tworzę plik układu dla obszaru administracyjnego (czy to w społeczności, czy w lokalnej puli kodów), czasami Magento ładuje ten układ xml przed załadowaniem xml układu modułu Adminhtml. Skutkuje to tym, że odwołania referencyjne są odrzucane, ponieważ nie utworzono żadnego bloku, w którym można by je zastosować.

Oczywiście buforowanie nie odgrywa tutaj roli. Dodałem Mage_Adminhtmlw <depends/>węźle w pliku deklaracji modułu.

Czy to był problem, który miałeś wcześniej? Jeśli tak, jak to rozwiązać?

Wiele razy pracowałem nad tym problemem i za każdym razem znajdowałem rozwiązanie, ale nie mogę pojąć, co powoduje, że tak się dzieje.

Joseph w SwiftOtter
źródło

Odpowiedzi:

16

Trudno powiedzieć bez konkretnego przykładu, ale podejrzewam, że masz problem z kolejnością plików a problem z kolejnością obsługi.

W szczególności Magento ładuje swoje pliki XML w kolejności modułów, z local.xmlostatnią dołączoną. Oto typowa lista w kolejności

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

Pliki XML układu zamówienia są ładowane w dyktuje, że stosowane są reguły XML układu zamówienia - dla  każdego uchwytu . To ostatnia część, która podrywa ludzi. Uchwyty to te węzły XML najwyższego poziomu.

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

Uchwyty są podobnymi wydarzeniami dla układu - na każde żądanie strony Magento wydaje kilka uchwytów. Możesz użyć Commerce Bug, aby zobaczyć, które uchwyty są wydawane dla konkretnego żądania strony

wprowadź opis zdjęcia tutaj

Dla osób z wyłączonymi obrazami były uchwyty wydane dla tego konkretnego żądania strony

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

Oznacza to, że Magento uruchomi każdą defaultporcję XML: najpierw dla core.xmlpliku, potem każdą defaultporcję dla page.xmlpliku, aż do local.xml.

Następnie Magento uruchomi każdą catalog_category_layered_nochildrenporcję XML: najpierw dla core.xmlpliku, potem dla page.xmlpliku, aż do local.xml.

Trwa to dla każdego uchwytu.

Co to oznacza to, że jeśli masz trochę aktualizacji XML w układzie local.xmlwewnątrz defaultuchwytu, to potrwa zanim odrobiną aktualizacji układ XML w core.xmlto wewnątrz catalog_category_layered_nochildrenuchwytu. Jest to zdecydowanie rzecz, która powoduje najwięcej zamieszania w układzie XML układu, zwłaszcza że wokół jest trochę konwencjonalnej wiedzy, która mówi „ładuje plik local.xml ostatni”.

Jeśli powyższe nieco Cię zdezorientowało i musisz dowiedzieć się więcej o systemie Layout XML, nadal uważam, że moja książka No Frills Magento Layout to najlepszy sposób na naukę systemu od podszewki.

Alan Storm
źródło