¿Cómo puedo deshabilitar el caché para una sección o bloque en particular?

31

He desarrollado una funcionalidad de carrito de barra superior para el frente de la tienda que muestra los últimos tres productos agregados al carrito, esto funciona muy bien cuando el caché está deshabilitado, pero cuando habilito el caché, muestra subtotal extraño en el carrito superior y productos extraños en el carrito.

Esto me pone triste: '(

Sé que esto está sucediendo debido a la memoria caché. ¿Hay algo que pueda deshabilitar el caché solo para esta sección? He intentado deshabilitar el caché html de bloque y compruebo que ahora funcionaba bien, pero descubrí que la categoría plana tiene problemas no especificados cuando el bloque HTML está deshabilitado.

ravisoni
fuente
2
¿Resolviste tu problema? ¿Cómo? Por favor comparta los detalles con nosotros. ¡Gracias!
Fabian Blechschmidt

Respuestas:

32

Puedes probar

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

o

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

para ponerlo a nulo.

Pero probablemente sea mejor usar ajax.

Hay un buen artículo sobre nullo 0significadohttp://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (enlace roto)

Dmytro Zavalkin
fuente
hmm el uso de ajax podría resolver el problema. Intentaré esto gracias por tu ayuda.
ravisoni
2
Pensé null= nunca caché y 0= caché permanentemente?
puntos de referencia el
1
null= nunca caché, correcto. Sin embargo, no estoy seguro de que sea posible argumentar el valor nullcon la <action>directiva.
Dmytro Zavalkin
2
<action method="setCacheLifetime"><s>null</s></action>trabajó para mi. TNX!
ruuter
66
Establecer Cache Lifetime en "0" no deshabilita el caché. ¡Solo "nulo" lo deshabilitará!
Anna Völkl
9

Puede deshabilitar el caché en getChildHtml (). Así es como se ve la firma:

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

Esto debería funcionar:

echo $this->getChildHtml('block', false);
Rick Kuipers
fuente
He intentado esto .. en realidad es ha codificado en top.phtml esto no está funcionando en ese caso
ravisoni
Eso también se puede almacenar en caché, así que supongo que no tendría mucho efecto. ¿Hay alguna posibilidad de que puedas sacarlo de esa parte? No creo que haya otras opciones ...
Rick Kuipers
9

En el archivo xml particular. Decir catalog.xml

En ese bloque de referencia en particular En ese bloque, establezca la acción del límite de caché en nulo

Ejemplo 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
fuente