Dringend: Wie kann man dynamische Daten im twig Template vom Cache ausnehmen lassen?

Wir möchte dynamische Daten in der Produktdetailansicht ausgeben lassen, die aus einer eigenen DB-Tabelle kommen. Leider werden diese dynamischen Daten beim ersten Aufruf der Produktdetailansicht für ein bestimmtes Produkt im Production-Modus gecacht und diese ändern sich dann nie mehr.

Wie kann Teile im twig-Template vom Cache ausnehmen lassen?

Danke für jede Hilfe zu dem Thema.

Das einfachste wäre deine Inhalte per Javescript zu laden und rein zu rendern. Das ist der übliche Weg für dynamische Inhalte.

Danke. Ich analysiere gerade, wie Shopware das so macht, bspw. beim Warenkorb-Icon rechts oben, wo sich ja der Betrag ändern muss oder auch unter Mein Konto bei den Adressen. Aber lt. den twig-Templates hätte ich da kein Javascript vermutet. Wird da nicht der Betrag auch schon serverseitig generiert.

Wobei dann wieder wundern würde, das es nicht gecacht wird. Die Umstellung auf Javascript und Ajax ist an der Stelle etwas aufwendig. Ich dachte, man kann im twig vielleicht bestimmte Teile einfach ausnehmen oder im Controller. Gäbe es neben Javascript noch Alternativen?

 

Ok. An der Stelle ist es mit JavaScript gelöst. Serverseitig steht 0,00 neben dem Cart-Symbol und dann wird per JavaScript der richtige Betrag eingesetzt. Aber bei Mein Konto -> Adressen ist es nicht so, da stehen die Daten gleich in der HTML-Ausgabe und werden serverseitig ausgegeben. Da wäre es interessant zu wissen, wie das dort funktioniert.

Im Account und Warenkorb Bereich ist der HTTP cache nicht aktiv.

Viele Grüße

Ok. Wie kann man den HTTP Cache abschalten? Wäre jetzt für die Produktdetailansicht natürlich nicht empfehlenswert vermutlich, aber ev. eine Alternative.

Kann man nicht bestimmte Teile einer Seite aus dem Cache ausnehmen? Ich hätte hier nur das gefunden:

 

Ich finde es eh nicht sauber wie Shopware es gelöst hat die Inhalte dynamisch nachzuladen.

  1. Nachgeladene Inhalte mit z.B. einem Popup Link funktionieren einfach nicht.

  2. Man könnte für die Snippets ein globales Data-Attribut setzen, welches kein zusätzliches JS erfordert:

 

1 „Gefällt mir“

@opalion schrieb:

Ok. Wie kann man den HTTP Cache abschalten? Wäre jetzt für die Produktdetailansicht natürlich nicht empfehlenswert vermutlich, aber ev. eine Alternative.

Kann man nicht bestimmte Teile einer Seite aus dem Cache ausnehmen? Ich hätte hier nur das gefunden:

https://symfony.com/doc/current/http_cache/esi.html#http-cache-fragments

 

In Twig lassen sich nicht Teile einzeln vom Cache ausschließen. Es gibt aber wohl eine Extension, kann man ja mal testen ob die kompatibel zu Shopware 6 ist.

https://github.com/ttempleton/craft-nocache

 

1 „Gefällt mir“

Hey @Moorleiche, Frohes Neues!
Hast du hier schon heraus gefunden ob man in Twig einzelne Teile vom Cache ausschließen kann?

LG
Mike

Hallo zusammen,

ich muss das Thema nochmal hervorkramen. Gibt es dazu schon was Neues?
Gerade bei der Verfügbarkeitsanzeige auf der Produktdetailseite ist das echt blöd. Wenn ein Kunde den letzten verfügbaren Artikel bestell, der Artikel aber noch 2 Stunden als verfügbar angezeigt wird und der nächste Kunde in dem Glauben bestellt, dass der Artikel sofort verfügbar ist.

VG
Patrick

Ist das denn der Fall? Bei einer Bestellung wird der Lagerbestand neu berechnet und der Cache des Produktes invalidiert.

Ich meine nicht den Lagerbestand sondern den verfügbaren Bestand. Der Lagerbestand wird ja erst nach Versand angepasst.
In unserem Fall ist es so, dass ein Kunde bestellt d.h. der Lagerbestand des Artikels ist 1 und der verfügbare Bestand 0. Im Frontend wird dem Kunden aber angezeigt, dass der Artikel verfügbar ist.
Wenn man den Cache löscht wird den Kunden angezeigt, dass der Artikel aktuell nicht mehr verfügbar ist bzw. mit Wiederauffüllzeit, wann er wieder versandfertig ist.

Mit Lagerbestand meine ich auch den verfügbaren Bestand. Bei einer offenen Bestellung wird der Bestand reserviert, der verfügbare Bestand zählt an dieser stelle runter. Spätestens im Warenkorb werden die Bestände Live abgerufen (ohne Cache), ist der verfügbare Bestand kleiner, dann wird der Warenkorb entsprechend angepasst. Ich vermute also, dass hier evtl ein Drittanbieter Plugin im Spiel ist. Es müsste lediglich nur der Cache invalidiert werden. Alternativ kannst du auch das Event ProductIndexerEvent mit den IDs der Produkte auslösen.

1 „Gefällt mir“

Danke für den Hinweis. Da hast du natürlich recht, das hatte ich nicht bedacht. Ich werde das mal prüfen.
Danke schon mal!

Welche Shopware-Version nutzt du? Ich glaube ab Shopware 6.5.5.0 wurde die Möglichkeit eingebaut, dass man auf die Logik vom Lagermanagement von Shopware 6.6.x umstellen kann, bei der es keinen Unterschied mehr zwischen Lagermenge und verfügbarem Bestand gibt - die Reservierungs-Logik entfällt also, so dass im Grunde bei der Bestands-Anzeige immer der korrekte Wert greifen müsste: Stock Configuration | Shopware Documentation

Wichtig bei der Umstellung in Shopware 6.5.x ist, dass man das SQL-Update ausführt (siehe shopware/UPGRADE-6.5.md at trunk · shopware/shopware · GitHub):

UPDATE product SET stock = available_stock WHERE stock != available_stock

Falls du eine Anbindung an eine Wawi hast, solltest du das aber gut durchtesten! (Solltest du aber ja sowieso in jedem Fall :wink: )

1 „Gefällt mir“