HTTP-Caching für Detailseiten

Hallo Leute,

angenommen man hat http-caching aktiviert und ändern direkt über die DB einen Preis.
Dann wird der Preis im Listing und bspw. in der Suche direkt richtig angezeigt.
Das klappt allerdings nicht auf der Detailseite. Diese ist noch gecached.

Wenn man allerdings ins Backend geht und dort den Preis eines Artikels ändert, teil das Backend dem Cache eine Art invalidierung mit und die Detailseite wird neu erzeugt inklusive des geänderten Preises.

Meine Frage wäre: Wie macht das Backend das?
Könnte ich irgendwo in der DB ein Flag dafür setzten oder einen Timestmap oder das irgendwie anders triggern?

Wäre wirklich interessant da einen Ansatz zu finden.

Gruß Yuri

Hi,

siehe hier: Understanding the Shopware HTTP Cache

Shopware()->Events()->notify(
    'Shopware_Plugins_HttpCache_InvalidateCacheId',
    array(
        'cacheId' => 'a14',
    )
);

Damit invalidierst du aus deinem Plugin heraus den Cache für den Artikel mit der ID 14. Wenn du über die Doctine-ORM-Models gehst, passiert das automatisch (das passiert auch im Backend). Wenn du das über PlainSQL machsst, wird gar nicht invalidiert. Übrigens auch Listing- und Suchseiten nicht, da scheint bei dir noch was anderes zu passieren - aber ist ja erstmal zweitrangig: Das Event oben sollte dir auf jeden Fall schon helfen.

Besten Gruß,

Daniel

1 „Gefällt mir“

Vielen Dank Daniel, wir versuchen So eine Lösung zu implementieren. Das mit dem Listing werde ich mir nochmal anschauen, keine Ahnung warum er das nicht gecached hat.

Hallo Daniel

eine Frage: Wenn man einen Artikel speichert (Im Backend) oder auch über ein Doctrine Model, und der Inhalt des Artikels unterscheidet sich NICHT. Wird er dann auch invalidiert? oder ist Shopware so schlau das zu erkennen?

Viele Grüße
Mike

 

@Daniel Nögel schrieb:

Hi,

siehe hier: https://developers.shopware.com/blog/2015/02/11/understanding-the-shopware-http-cache/#cache-for-plugin-developers

Shopware()->Events()->notify(
‚Shopware_Plugins_HttpCache_InvalidateCacheId‘,
array(
‚cacheId‘ => ‚a14‘,
)
);

Damit invalidierst du aus deinem Plugin heraus den Cache für den Artikel mit der ID 14. Wenn du über die Doctine-ORM-Models gehst, passiert das automatisch (das passiert auch im Backend). Wenn du das über PlainSQL machsst, wird gar nicht invalidiert. Übrigens auch Listing- und Suchseiten nicht, da scheint bei dir noch was anderes zu passieren - aber ist ja erstmal zweitrangig: Das Event oben sollte dir auf jeden Fall schon helfen.

Besten Gruß,

Daniel

Hi Mike,

habe das jetzt nicht getestet - aber da beim Speichern ja zumindest das ChangeDate immer geändert wird, wird auch immer was geschrieben - entsprechend sollte also in jedem Fal invalidiert werden. Das ist ja auch weiter nicht schlimm - es wird ja nur der eine Artikel invalidiert.

Ansonsten musst du das eben ausprobieren - aber das wäre erstmal meine Überlegung dazu.

Besten Gruß

Daniel