Wie kann ich den Cache für einen bestimmten Abschnitt oder Block deaktivieren?

31

Ich habe eine Top-Bar-Cart-Funktionalität für die Ladenfront entwickelt, die die letzten drei Produkte anzeigt, die dem Warenkorb hinzugefügt wurden. Dies funktioniert hervorragend, wenn der Cache deaktiviert ist, aber wenn ich den Cache aktiviere, werden komische Zwischensummen im Top-Cart und komische Produkte im Warenkorb angezeigt.

Das macht mich traurig: '(

Ich weiß, dass dies wegen des Cache geschieht. Kann ich den Cache nur für diesen Abschnitt deaktivieren? Ich habe versucht, den Block-HTML-Cache zu deaktivieren und jetzt zu überprüfen, ob dies funktioniert hat, aber ich fand, dass die Kategorie flach nicht spezifizierte Probleme hat, wenn Block-HTML deaktiviert ist.

Ravisoni
quelle
2
Hast du dein Problem gelöst? Wie? Bitte teilen Sie uns die Details mit. Vielen Dank!
Fabian Blechschmidt

Antworten:

32

Du kannst es versuchen

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

oder

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

um es auf null zu setzen.

Aber wahrscheinlich ist es besser, Ajax zu verwenden.

Es gibt einen guten Artikel über nulloder 0Bedeutunghttp://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (Link ist kaputt)

Dmytro Zavalkin
quelle
hmm Verwendung von Ajax könnte das Problem lösen. Ich werde dies versuchen, danke für Ihre Hilfe.
Ravisoni
2
Ich dachte null= nie zwischenspeichern und 0= dauerhaft zwischenspeichern?
Benmarks
1
null= nie zwischenspeichern, richtig. Ich bin mir jedoch nicht sicher, ob es möglich ist, nullmit der <action>Direktive einen Wert zu argumentieren .
Dmytro Zavalkin
2
<action method="setCacheLifetime"><s>null</s></action>arbeitete für mich. TNX!
Ruuter
6
Durch Festlegen der Cache-Lebensdauer auf "0" wird der Cache nicht deaktiviert. Nur "null" deaktiviert es!
Anna Völkl
9

Sie können den Cache in getChildHtml () deaktivieren. So sieht die Signatur aus:

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

Dies sollte den Trick machen:

echo $this->getChildHtml('block', false);
Rick Kuipers
quelle
ich habe das ausprobiert .. eigentlich ist es in top.phtml codiert das funktioniert in diesem fall nicht
ravisoni
Das könnte auch zwischengespeichert werden, also würde es wahrscheinlich keine große Wirkung haben. Gibt es eine Chance, dass Sie es außerhalb dieses Teils ziehen können? Ich glaube, es gibt keine anderen Optionen ...
Rick Kuipers
9

In der jeweiligen XML-Datei. Sagen Sie catalog.xml

In diesem für einen bestimmten Referenzblock In diesem Block setzen Sie die Aktion des Cache-Limits auf Null

Beispiel für 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
quelle