无法阻止 Magento 缓存块
Posted
技术标签:
【中文标题】无法阻止 Magento 缓存块【英文标题】:Unable to prevent Magento from Caching a Block 【发布时间】:2012-02-27 03:52:00 【问题描述】:我正在开发一个 Magento 1.6 站点,该站点在主页的 CMS“布局更新 XML”字段中有以下 xml:
<reference name="content">
<block type="catalog/navigation" name="catalog.category.home" as="homecategory" template="catalog/category/homecategory.phtml" />
</reference>
由于模板显示随机类别,我想禁用此块的缓存。 为此,我尝试使用 getChildHtml('sub-block-template', false) 和以下内容:
(homecategory 的模板中有 $this->getChildHtml('random_categories', false))
<reference name="content">
<block type="catalog/navigation" name="catalog.category.home" as="homecategory" useCache="false" template="catalog/category/homecategory.phtml">
<block type="catalog/navigation" name="catalog.category.home.randcats" as="random_categories" useCache="false" template="catalog/category/random.phtml" />
</block>
</reference>
所以现在我被卡住了,想知道为什么我不能阻止缓存该块,尽管使用了 'false' 参数。
【问题讨论】:
您是否在管理面板 > 系统 > 缓存管理中禁用了 Magento 缓存? 您应该为您的块实现整页缓存打孔。请参阅本教程 this tutorial 和 this question on SO。 没有 'useCache="false"' 属性之类的东西。 是的,这对我来说是一次绝望的尝试。忘记从我粘贴的代码示例中删除它。 @Detzee:我需要在这个站点上进行缓存——这就是重点。但是我想让这个块不被缓存。我最终选择了默认的 2 小时缓存过期时间,这是该站点在主页上轮换类别的可接受解决方案。 【参考方案1】:我遇到了同样的问题。我相信它必须与 type="catalog/navigation" 的块类型有关。我已经看到在其他类型的块上禁用缓存工作。这是针对此块类型和此问题的修复:
phtml 文件更改:确保第二个参数为假
echo $this->getChildHtml('topCategoriesList',false);
xml 文件更改: 将这些操作添加到块中
<block type="catalog/navigation" name="topCategoriesList" as="topCategoriesList" template="catalog/navigation/categorylist.phtml">
<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>
</block>
【讨论】:
【参考方案2】:您是否尝试过通过创建新的自定义块类型并重载缓存函数来强制它?扩展 Mage_Catalog_Block_Product_List_Random 类并创建一个空的伪构造函数:
protected function _construct()
这将防止继承添加缓存标签、生命周期和其他元数据到块对象。然后,您也可以重载缓存键信息,使其不使用任何现有(或启用)的缓存块。例如:
public function getCacheKeyInfo()
return array(
'MY_CACHE_TAG',
Mage::app()->getStore()->getId(),
(int)Mage::app()->getStore()->isCurrentlySecure(),
Mage::getDesign()->getPackageName(),
Mage::getDesign()->getTheme('template')
);
【讨论】:
谢谢,我试试。虽然我还在用消防水管喝水,但创建这个自定义块可能需要反复试验。 也许可以尝试查看inchoo.net/ecommerce/magento/magento-block-caching 看看是否对您有帮助? Jona,感谢您提供该文章的链接。我注意到它表明当$this->addData(array('cache_lifetime' => 'false'))
是这种情况时(这是Category/Navigation 的默认设置,这意味着缓存每2 小时(7200 秒)自动刷新一次。这足以满足我的要求,并且可能更好比出于性能原因没有缓存。以上是关于无法阻止 Magento 缓存块的主要内容,如果未能解决你的问题,请参考以下文章