当我为管理区域(无论是在社区还是本地代码池中)创建布局文件时,有时Magento会在加载Adminhtml模块布局xml之前先加载该布局xml。结果是引用调用被丢弃,因为没有创建块来应用它们。
显然,缓存在这里没有发挥作用。我已经Mage_Adminhtml
在<depends/>
模块声明文件的节点中添加了。
这是您以前遇到的一个问题吗?如果是这样,如何解决?
我已经多次解决此问题,并且每次都找到解决方案,但是我无法弄清楚是什么原因导致了这种情况的发生。
当我为管理区域(无论是在社区还是本地代码池中)创建布局文件时,有时Magento会在加载Adminhtml模块布局xml之前先加载该布局xml。结果是引用调用被丢弃,因为没有创建块来应用它们。
显然,缓存在这里没有发挥作用。我已经Mage_Adminhtml
在<depends/>
模块声明文件的节点中添加了。
这是您以前遇到的一个问题吗?如果是这样,如何解决?
我已经多次解决此问题,并且每次都找到解决方案,但是我无法弄清楚是什么原因导致了这种情况的发生。
Answers:
没有一个具体的例子很难说,但是我怀疑您遇到了文件顺序与句柄顺序的问题。
具体来说,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将运行每个default
XML块:首先运行core.xml
文件,然后运行文件的每个default
块,page.xml
一直到local.xml
。
然后,Magento将运行每个catalog_category_layered_nochildren
XML块:首先是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》是从内而外学习系统的最佳方法。