我正在使用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-&gt; 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'参数。
答案 0 :(得分:6)
我有同样的问题。我相信它必须使用type =“catalog / navigation”的块类型做一些事情。我已经看到这种禁用缓存工作在其他类型的块上。以下是此块类型和此问题的修复:
phtml文件更改:确保第二个参数为false
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>
答案 1 :(得分:3)
您是否尝试过通过创建新的自定义块类型并重载缓存功能来强制它?扩展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')
);
}