Como posso desativar o cache para uma seção ou bloco específico

31

Eu desenvolvi uma funcionalidade de carrinho de barra superior para a frente da loja que exibe os três últimos produtos adicionados ao carrinho. Isso funciona muito bem quando o cache está desativado, mas quando eu habilito o cache, ele mostra um subtotal estranho no carrinho superior e produtos estranhos no carrinho.

Isso me deixa triste: '(

Eu sei que isso está acontecendo por causa do cache. Existe algo que eu possa desativar o cache somente para esta seção? Tentei desabilitar o cache de html do bloco e verifique se agora estava funcionando muito bem, mas achei que a categoria flat está tendo problemas não especificados quando o HTML do bloco está desabilitado.

Ravisoni
fonte
2
Você resolveu o seu problema? Quão? Por favor, compartilhe os detalhes conosco. Obrigado!
Fabian Blechschmidt

Respostas:

32

Podes tentar

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

ou

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

para configurá-lo como nulo.

Mas provavelmente é melhor usar ajax.

Há um bom artigo sobre nullou 0significadohttp://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (link está quebrado)

Dmytro Zavalkin
fonte
hmm, o uso do ajax pode resolver o problema. Vou tentar isso obrigado pela sua ajuda.
ravisoni
2
Eu pensei null= nunca cache e 0= cache permanentemente?
benmarks
1
null= nunca cache, certo. No entanto, não tenho certeza se é possível argumentar o valor nullcom a <action>diretiva.
Dmytro Zavalkin
2
<action method="setCacheLifetime"><s>null</s></action>trabalhou para mim. TNX!
ruuter
6
Definir a vida útil do cache como "0" não desativa o cache. Somente "null" irá desativá-lo!
Anna Volkl
9

Você pode desativar o cache em getChildHtml (). É assim que a assinatura se parece:

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

Isso deve fazer o truque:

echo $this->getChildHtml('block', false);
Rick Kuipers
fonte
Eu tentei isso .. realmente é ter codificado em top.phtml isso não está funcionando nesse caso
ravisoni
Isso também pode ser armazenado em cache, então acho que não teria muito efeito. Existe uma chance de você conseguir extrair essa parte? Eu não acho que existem outras opções ...
Rick Kuipers
9

No arquivo xml específico. Diga catalog.xml

Nesse bloco de referência específico, nesse bloco, defina a ação do limite do cache como nula

Exemplo de 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>
Vinay Shah
fonte