如何禁用特定部分或块的缓存


31

我已经为商店前部开发了顶部栏购物车功能,该功能可以显示添加到购物车的最新三个产品,这在禁用缓存时非常有用,但是当我启用缓存时,它会显示顶部购物车中的奇怪小计和购物车中的奇怪产品。

这让我很难过:'(

我知道这是由于缓存而发生的。有什么我可以禁用此部分的缓存的吗?我尝试禁用块html缓存,现在检查它是否工作得很好,但是当禁用块HTML时,我发现类别平面存在未指定的问题。


2
您解决问题了吗?怎么样?请与我们分享详细信息。谢谢!
Fabian Blechschmidt

Answers:


32

你可以试试

    <reference name="needed block">
        <action method="setCacheLifetime"><s>null</s></action>
    </reference>

要么

    <reference name="needed block">
        <action method="setCacheLifetime" />
    </reference>

将其设置为null。

但是使用ajax可能更好。

关于null0含义的文章不错http://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (链接断开)


使用Ajax可以解决此问题。谢谢您的帮助,我会尝试的。
ravisoni

2
我以为null=永不缓存,并且0=永久缓存?
benmarks

1
null=永不缓存,对。但是,我不确定是否可以null通过<action>指令将参数值传递给。
Dmytro Zavalkin

2
<action method="setCacheLifetime"><s>null</s></action>为我工作。TNX!
ruuter

6
将“缓存生存期”设置为“ 0”不会禁用缓存。只有“ null”会禁用它!
AnnaVölkl2013年

9

您可以在getChildHtml()中禁用缓存。签名如下所示:

public function getChildHtml($name = '', $useCache = true, $sorted = false)

这应该可以解决问题:

echo $this->getChildHtml('block', false);

我已经尝试过..实际上是在top.phtml中编码的,在这种情况下
不起作用

那可能也被缓存了,所以我想它不会有太大影响。您是否有机会将其拉出该部分?我认为没有其他选择...
Rick Kuipers

9

在特定的xml文件中。说catalog.xml

在该块中,对于特定参考块,在该块中,将缓存限制的操作设置为null

catalog.xml的示例

<reference name="right">
    <block type="catalog/navigation" name="catalog.product.cat.related" as="related_cat" template="catalog/navigation/list_cat.phtml" after="-" >
        <action method="unsetData"><key>cache_lifetime</key></action>
        <action method="unsetData"><key>cache_tags</key></action>
    </block>
</reference>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.