Ordre de chargement incorrect de la disposition XML


15

Lorsque je crée un fichier de mise en page pour la zone d'administration (que ce soit dans la communauté ou le pool de codes local), Magento charge parfois ce fichier XML de mise en page avant le chargement du fichier XML de mise en page du module Adminhtml. L'effet est que les appels de référence sont rejetés car aucun bloc n'est créé pour les appliquer.

De toute évidence, la mise en cache ne joue pas un rôle ici. J'ai ajouté Mage_Adminhtmlle <depends/>nœud dans le fichier de déclaration du module.

Est-ce un problème que vous avez rencontré auparavant? Si oui, comment est-il résolu?

J'ai travaillé sur ce problème à plusieurs reprises et j'arrive à trouver une solution à chaque fois, mais je ne peux pas comprendre ce qui fait que cela se produit en premier lieu.

Réponses:


16

C'est difficile à dire sans un exemple concret, mais je pense que vous rencontrez un problème d'ordre de fichier par rapport à un ordre de traitement.

Plus précisément, Magento charge ses fichiers XML dans l'ordre des modules, avec local.xmlcloué en dernier. Voici une liste typique, afin

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

Les fichiers XML de mise en page de commande sont chargés dans dictées les règles XML de mise en page de commande sont appliquées -  par poignée . C'est cette dernière partie qui fait voyager les gens. Les poignées sont ces nœuds XML de niveau supérieur.

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

Les poignées sont en quelque sorte des événements similaires pour la mise en page - pour chaque demande de page, Magento émet un certain nombre de poignées. Vous pouvez utiliser Commerce Bug pour voir quels descripteurs sont émis pour une demande de page particulière

entrez la description de l'image ici

Pour ceux dont les images sont désactivées, les poignées émises pour cette demande de page particulière étaient

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

Cela signifie que Magento exécutera chaque defaultbloc XML: d'abord pour le core.xmlfichier, puis chaque defaultbloc pour le page.xmlfichier, jusqu'à la fin local.xml.

Ensuite, Magento exécutera chaque catalog_category_layered_nochildrenmorceau XML: d'abord pour le core.xmlfichier, puis pour le page.xmlfichier, jusqu'à la fin local.xml.

Cela continue pour chaque poignée.

Cela signifie que si vous avez un peu de XML de mise à jour de mise en page à l' local.xmlintérieur d'un defaulthandle, il s'exécutera avant un peu de XML de mise à jour de mise en page core.xmlqui se trouve à l'intérieur du catalog_category_layered_nochildrenhandle. C'est, de loin, la chose qui cause le plus de confusion dans le système XML de mise en page, d'autant plus qu'il y a un peu de sagesse conventionnelle qui dit "les charges locales.xml durent".

Si ce qui précède vous a un peu dérouté et que vous devez en savoir plus sur le système Layout XML, je pense toujours que mon livre No Frills Magento Layout est le meilleur moyen d'apprendre le système à l'envers.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.