布局XML的加载顺序不正确


15

当我为管理区域(无论是在社区还是本地代码池中)创建布局文件时,有时Magento会在加载Adminhtml模块布局xml之前先加载该布局xml。结果是引用调用被丢弃,因为没有创建块来应用它们。

显然,缓存在这里没有发挥作用。我已经Mage_Adminhtml<depends/>模块声明文件的节点中添加了。

这是您以前遇到的一个问题吗?如果是这样,如何解决?

我已经多次解决此问题,并且每次都找到解决方案,但是我无法弄清楚是什么原因导致了这种情况的发生。

Answers:


16

没有一个具体的例子很难说,但是我怀疑您遇到了文件顺序与句柄顺序的问题。

具体来说,Magento按模块顺序加载其XML文件,local.xml最后附加。这是一个典型的列表,按顺序

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

加载订单布局XML文件指示每个句柄应用了订单布局XML规则  。这是使人们绊倒的最后一部分。句柄是那些顶级XML节点。

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

句柄有点像布局事件—对于每个页面请求,Magento都会发出许多句柄。您可以使用Commerce Bug来查看针对特定页面请求发出了哪些句柄

在此处输入图片说明

对于那些图像已关闭的用户,为该特定页面请求发出的句柄为

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

这意味着,Magento将运行每个defaultXML块:首先运行core.xml文件,然后运行文件的每个default块,page.xml一直到local.xml

然后,Magento将运行每个catalog_category_layered_nochildrenXML块:首先是core.xml文件,然后是page.xml文件,一直到local.xml

对于每个句柄,此过程继续进行。

这意味着,如果你有一个位布局更新XML的local.xml一个内部default处理,它将运行之前在一个位布局更新XML的core.xml内侧是的catalog_category_layered_nochildren句柄。到目前为止,这是导致布局XML系统最混乱的事情,尤其是因为有一些传统的看法说“ local.xml最后加载”。

如果以上让您有些困惑,并且您需要了解有关Layout XML系统的更多信息,我仍然认为我的书《No Frills Magento Layout》是从内而外学习系统的最佳方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.