Comment puis-je désactiver le cache pour une section ou un bloc particulier

31

J'ai développé une fonctionnalité de chariot à barre supérieure pour la devanture de magasin qui affiche les trois derniers produits ajoutés au panier, cela fonctionne très bien lorsque le cache est désactivé, mais lorsque j'active le cache, il affiche un sous-total étrange dans le panier supérieur et des produits étranges dans le panier.

Cela me rend triste: '(

Je sais que cela se produit à cause du cache. Y a-t-il quelque chose que je peux désactiver le cache pour cette section uniquement? J'ai essayé de désactiver le cache html de bloc et vérifiez maintenant que cela fonctionnait bien, mais j'ai trouvé que la catégorie plate avait des problèmes non spécifiés lorsque le bloc HTML était désactivé.

ravisoni
la source
2
Avez-vous résolu votre problème? Comment? Veuillez partager les détails avec nous. Merci!
Fabian Blechschmidt

Réponses:

32

Tu peux essayer

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

ou

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

pour le mettre à null.

Mais il est probablement préférable d'utiliser ajax.

Il y a un bon article sur nullou 0signifianthttp://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (le lien est rompu)

Dmytro Zavalkin
la source
hmm l'utilisation d'ajax pourrait résoudre le problème. Je vais essayer cela merci pour votre aide.
ravisoni
2
Je pensais null= ne jamais mettre en cache et 0= mettre en cache en permanence?
benmarks
1
null= ne jamais mettre en cache, à droite. Cependant, je ne suis pas sûr qu'il soit possible d'argumenter la valeur nullavec la <action>directive.
Dmytro Zavalkin
2
<action method="setCacheLifetime"><s>null</s></action>travaillé pour moi. TNX!
ruuter
6
La définition de la durée de vie du cache sur "0" ne désactive pas le cache. Seul "null" le désactivera!
Anna Völkl
9

Vous pouvez désactiver le cache dans getChildHtml (). Voici à quoi ressemble la signature:

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

Cela devrait faire l'affaire:

echo $this->getChildHtml('block', false);
Rick Kuipers
la source
j'ai essayé cela .. est en fait codé dans top.phtml cela ne fonctionne pas dans ce cas
ravisoni
Cela pourrait également être mis en cache, donc je suppose que cela n'aurait pas beaucoup d'effet. Y a-t-il une chance que vous puissiez le retirer en dehors de cette partie? Je ne pense pas qu'il y ait d'autres options ...
Rick Kuipers
9

Dans le fichier xml particulier. Dites catalog.xml

Dans ce bloc de référence particulier Dans ce bloc, définissez l'action de la limite de cache sur null

Exemple 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
la source