【问题标题】:Unable to prevent Magento from Caching a Block无法阻止 Magento 缓存块
【发布时间】: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 tutorialthis question on SO
  • 没有 'useCache="false"' 属性之类的东西。
  • 是的,这对我来说是一次绝望的尝试。忘记从我粘贴的代码示例中删除它。
  • @Detzee:我需要在这个站点上进行缓存——这就是重点。但是我想让这个块不被缓存。我最终选择了默认的 2 小时缓存过期时间,这是该站点在主页上轮换类别的可接受解决方案。

标签: magento


【解决方案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-&gt;addData(array('cache_lifetime' =&gt; 'false')) 是这种情况时(这是Category/Navigation 的默认设置,这意味着缓存每2 小时(7200 秒)自动刷新一次。这足以满足我的要求,并且可能更好比出于性能原因没有缓存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多