Falsche Ladereihenfolge von Layout XML

15

Wenn ich eine Layout-Datei für den Admin-Bereich erstelle (ob in der Community oder im lokalen Code-Pool), lädt Magento manchmal diese Layout-XML-Datei, bevor die Adminhtml-Modul-Layout-XML-Datei geladen wird. Der Effekt ist, dass Referenzaufrufe verworfen werden, da kein Block erstellt wurde, auf den sie angewendet werden können.

Offensichtlich spielt Caching hier keine Rolle. Ich habe Mage_Adminhtmlim <depends/>Knoten in der Moduldeklarationsdatei hinzugefügt .

Ist dies ein Problem, das Sie zuvor hatten? Wenn ja, wie wird es gelöst?

Ich habe dieses Problem einige Male durchgearbeitet und bin jedes Mal zu einer Lösung gekommen, aber ich kann nicht herausfinden, warum dies überhaupt passiert.

Joseph bei SwiftOtter
quelle

Antworten:

16

Es ist schwer zu sagen, ohne ein konkretes Beispiel, aber ich vermute, Sie stoßen auf ein Problem mit der Reihenfolge von Dateien vs.

Insbesondere lädt Magento seine XML-Dateien in der Modulreihenfolge, wobei zuletzt local.xmlangeheftet wird. Hier ist eine typische Liste in der richtigen Reihenfolge

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

Das Laden der Auftragslayout-XML-Dateien bestimmt, welche Auftragslayout-XML-Regeln angewendet werden -  pro Handle . Es ist dieser letzte Teil, der die Leute aus dem Konzept bringt. Handles sind die XML-Knoten der obersten Ebene.

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

Handles sind ähnliche Ereignisse für das Layout - für jede Seitenanforderung gibt Magento eine Reihe von Handles aus. Sie können Commerce Bug verwenden, um zu sehen, welche Handles für eine bestimmte Seitenanforderung ausgegeben werden

Bildbeschreibung hier eingeben

Für diejenigen mit deaktivierten Bildern waren die für diese bestimmte Seitenanforderung ausgegebenen Handles

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

Dies bedeutet, dass Magento jeden defaultXML-Chunk ausführt: zuerst für die core.xmlDatei, dann für jeden defaultChunk für die page.xmlDatei, bis hinunter zu local.xml.

Dann führt Magento jeden catalog_category_layered_nochildrenXML-Block aus: zuerst für die core.xmlDatei, dann für die page.xmlDatei, bis hinunter zu local.xml.

Dies wird für jeden Punkt fortgesetzt.

Dies bedeutet, dass, wenn sich in local.xmleinem defaultHandle etwas Layout-Aktualisierungs-XML befindet , dieses vor etwas Layout-Aktualisierungs-XML ausgeführt wird core.xml, das sich im catalog_category_layered_nochildrenHandle befindet. Dies ist bei weitem die Sache, die im Layout-XML-System die größte Verwirrung stiftet, zumal es ein bisschen konventionelle Weisheit gibt, die besagt, dass "local.xml last last" ist.

Wenn Sie das oben Genannte ein wenig verwirrt haben und mehr über das Layout-XML-System erfahren möchten, denke ich, dass mein Buch No Frills Magento Layout der beste Weg ist, das System von innen nach außen zu lernen.

Alan Storm
quelle