通常,当我在Magento进行开发时,我不会花时间去探究并确切地了解工作原理。相反,我假设他们会按照期望的方式工作。我最近在一种情况下工作,我想更改分组产品页面的功能以使用完全不同的布局。通常,我希望能够简单地删除某些手柄并将其他手柄添加到布局中。对于产品来说,它被埋在几个不同的函数调用中,但最终我在Mage_Catalog_Helper_Product_View :: 在 itProductLayout中找到了我想要的东西(添加了特定于产品的句柄)。我通过替换默认设置来修改布局以加载代码:
1 2 3 4 5 |
$更新 -> addHandle ( '默认' ); $控制器 ->addActionLayoutHandles(); $更新 -> addHandle ('产品类别_' . $产品 -> getTypeId ()); $更新 -> addHandle ( '产品_' . $产品 -> getId ()); $控制器 -> 加载 LayoutUpdates(); |
根据产品是否为分组产品,我更改了使用的手柄。因为我们没有’如果不再希望所有PRODUCT_句柄甚至是分组产品的catalog_product_view句柄,我将布局部分修改为:
1 2 |
$更新 -> 加载 ( '默认' ); $更新 -> 加载 ('myhandle_index_index'); |
直到我打开缓存,这一切都很好。事实证明,加载方法使用缓存(特别是布局缓存标记)来存储默认加载结果。缓存的值是所有合并完成后的结果,因此,当第二个负载运行时,它被简单地添加到布局的末尾而没有将两者合并在一起,从而导致布局混乱。一旦我深入研究并找出问题所在,就可以证明这是一个简单的修复程序,可确保缓存的版本正确:
1 |
$更新 -> 加载 ( 数组 ( '默认' , 'myhandle_index_index')); |
这可能同样有效:
1 2 3 |
$更新 -> addHandle ( '默认' ); $更新 -> addHandle ('myhandle_index_index'); $控制器 -> 加载 LayoutUpdates(); |
因此,如果您发现布局缓存会引起问题,请确保使用的解决方案之一考虑了上述缓存,并且没有为每个句柄调用负载。