Cache für eigenen Plugin-Controller deaktivieren

Wir verwenden in unserem Plugin einen Controller, den wir in der Boostrap über $this->registerController(‘Frontend’, ‘UnserFrontendController’) registrieren.

Leider bringen uns die Infos aus folgenden Quellen nicht weiter:

http://community.shopware.com/Shopware-4.1-Upgrade-Guide-für-Entwickler_detail_1297.html#Einen_bestehenden_Shopware-Controller_als_non-cachable_markieren

Wenn wir in der  onPostDispatch function mit $response->setHeader(‘Cache-Control’, ‘no-cache’, true) erweitern,
dann wird zwar der Controller nicht mehr gechached allerdings dann vermutlich auch der komplette Shop nicht mehr, wegen
$this->subscribeEvent(‘Enlight_Controller_Action_PostDispatchSecure_Frontend’, ‘onPostDispatch’)

Wir wollen aber nur den Controller von dem Cache ausschließen. Hat jemand eine Idee?

Hi,

du musst eigene Controller nicht vom Cache ausschließen - der Cache funktioniert über das Whitelisting von cachbaren Controllern, d.h. eigene Controller werden im Standard grundsätzlich nicht gecacht. Wenn du im globalen PostDispatch (der ja für alle Controller greift) Cache-Control auf „no-cache“ setzt, werden alle Seite nicht mehr gecacht, das ist korrekt. Du meintest vermutlich einfach die „postDispatch“-Methode in deinem Controller, oder?

Lange Rede, kurzer Sinn: Custom-Controller werden im Standard nicht gecacht. Habt ihr da vll. was verkonfiguriert? 

Schönen Gruß,

Daniel 

1 „Gefällt mir“

Hi Daniel,

besten Dank!
Das Problem liegt tatäschlich an einer anderen Baustelle. Hier mal kurz erklärt, was die Intention ist:

Der Frontend-Controller wird über einen AJAX-Request aufgerufen, der JSON-Daten an den Controller übermittelt, die dann wiedrum in eine Session geschrieben werden. Diese Sesssion soll dann in der Bootstrap weiterverarbeitet werden. Die Ausgabe der Session in der Bootstrap gibt aber nicht immer den aktuellen Stand wieder - dieser ist immer erst nach einer gewissen Zeit aktuell.

Also wird anscheinend die Session irgendwie gecached, oder!?

Hi,

ok, und in der Bootstrap hängst du auf einem PostDispatch-Event von einem Standard-Controller? Dann wird das Problem ja eher sein, dass dein eigener Controller korrekt in die Session schreibt, die PostDispatch-Events aber nicht greifen, weil der HTTPCache einspringt, oder?

Welche Daten schreibst du denn in die Session? Auf welchen Seiten musst du welche individualisierten Optionen ausgeben? Unter Umständen könnte dir das Smarty-Action-Tag {action} weiter helfen oder du manipulierst die gecachten Seiten mit Javascript. Das habe ich hier mal beschrieben: Shopware HTTP cache

Daniel

Hi zusammen,

Happy Easter erst mal-

mal eine Frage zum Cache im frontend -> detail, kann es sein das dei delivery_information.tpl  gechached wird?
 

Ich ändere dei Lierferzeit Tage oder Datum über ein SQL UPDATE nicht über das Backend im Artikel.
Die Daten werden nicht sofort bzw. aktualisiert angezeigt.

frontend/detail wird doch insgesamt gecached, da müsstest du es wohl über ein widget machen