Ordine di caricamento errato di XML layout


15

Quando creo un file di layout per l'area di amministrazione (sia nella comunità che nel pool di codici locali), a volte Magento sta caricando quel layout xml prima che venga caricato il layout xml del modulo Adminhtml. L'effetto è che le chiamate di riferimento vengono eliminate perché non è stato creato alcun blocco per applicarle.

Ovviamente, la cache non sta giocando un ruolo qui. Ho aggiunto Mage_Adminhtmlnel <depends/>nodo nel file di dichiarazione del modulo.

È un problema che hai avuto prima? In tal caso, come viene risolto?

Ho risolto questo problema diverse volte e riesco a trovare una soluzione ogni volta, ma non riesco a capire che cosa accada, in primo luogo.

Risposte:


16

È difficile dirlo senza un esempio concreto, ma sospetto che tu stia eseguendo un ordine di file contro un problema di gestione degli ordini.

In particolare, Magento carica i suoi file XML in ordine di modulo, con local.xmlvirata alla fine. Ecco un elenco tipico, in ordine

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

I file XML del layout dell'ordine vengono caricati in base alle regole XML del layout dell'ordine applicate -  per handle . È quest'ultima parte che inciampa le persone. Le maniglie sono quei nodi XML di livello superiore.

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

Le maniglie sono una specie di eventi simili al layout: per ogni richiesta di pagina Magento emette una serie di maniglie. È possibile utilizzare Commerce Bug per vedere quali handle sono emessi per una particolare richiesta di pagina

inserisci qui la descrizione dell'immagine

Per quelli con le immagini disattivate, le maniglie emesse per quella particolare richiesta di pagina erano

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

Ciò significa che Magento eseguirà ogni defaultblocco XML: prima per il core.xmlfile, poi per ogni defaultblocco per il page.xmlfile, fino in fondo local.xml.

Quindi, Magento eseguirà ogni catalog_category_layered_nochildrenblocco XML: prima per il core.xmlfile, poi per il page.xmlfile, fino in fondo local.xml.

Questo continua per ogni maniglia.

Ciò significa che, se hai un po 'di XML di aggiornamento del layout local.xmlall'interno di un defaulthandle, verrà eseguito prima di un po' di XML di aggiornamento del layout core.xmlall'interno catalog_category_layered_nochildrendell'handle. Questa è, di gran lunga, la cosa che causa la maggior confusione nel sistema XML di layout, soprattutto perché c'è un po 'di saggezza convenzionale che dice "i carichi local.xml durano".

Se quanto sopra ti ha confuso un po 'e hai bisogno di saperne di più sul sistema Layout XML, penso ancora che il mio libro No Frills Magento Layout sia il modo migliore per imparare il sistema a rovescio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.