Ordem de carregamento incorreta do XML do layout

15

Quando eu crio um arquivo de layout para a área de administração (seja na comunidade ou no conjunto de códigos local), às vezes o Magento carrega esse xml de layout antes que o xml de layout do módulo Adminhtml seja carregado. O efeito é que as chamadas de referência são descartadas porque não há nenhum bloco criado para aplicá-las.

Obviamente, o cache não está desempenhando um papel aqui. Eu adicionei Mage_Adminhtmlno <depends/>nó no arquivo de declaração do módulo.

Esse é um problema que você já teve antes? Se sim, como é resolvido?

Eu já trabalhei com esse problema várias vezes e sempre encontrei uma solução, mas não consigo descobrir o que faz com que isso aconteça em primeiro lugar.

Joseph na SwiftOtter
fonte

Respostas:

16

É difícil dizer sem um exemplo concreto, mas suspeito que você esteja executando um pedido de arquivo em vez de lidar com um problema de pedido.

Especificamente, o Magento carrega seus arquivos XML em ordem de módulo, com o local.xmlúltimo por último. Aqui está uma lista típica, em ordem

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

Os arquivos XML do layout do pedido são carregados em dita as regras XML do layout do pedido são aplicadas -  por identificador . É esta última parte que tropeça nas pessoas. Alças são aqueles nós XML de nível superior.

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

As alças são como eventos semelhantes para o layout - para cada solicitação de página, o Magento emite várias alças. Você pode usar o Commerce Bug para ver quais identificadores são emitidos para uma solicitação de página específica

insira a descrição da imagem aqui

Para aqueles com imagens desativadas, os identificadores emitidos para essa solicitação de página específica foram

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

O que isso significa é que o Magento executará todos defaultos trechos XML: primeiro para o core.xmlarquivo, depois todos os defaulttrechos do page.xmlarquivo, até o final local.xml.

Em seguida, o Magento executará todos catalog_category_layered_nochildrenos trechos XML: primeiro no core.xmlarquivo, depois no page.xmlarquivo, até o final local.xml.

Isso continua para cada identificador.

O que isso significa é que, se você tiver um pouco de XML de atualização de layout local.xmldentro de um defaultidentificador, ele será executado antes de um pouco de XML de atualização de layout core.xmldentro do catalog_category_layered_nochildrenidentificador. Essa é, de longe, a coisa que causa mais confusão no sistema XML de layout, especialmente porque há um pouco de sabedoria convencional que diz "local.xml carrega por último".

Se o exposto acima o confundiu um pouco e você precisa aprender mais sobre o sistema XML de layout, ainda acho que meu livro No Frills Magento Layout é a melhor maneira de aprender o sistema de dentro para fora.

Alan Storm
fonte