Warenkorbinhalt überall anzeigen

Hallo Leute! Hätte eine kurze Frage. Wie komme ich jederzeit - also auf jeder Unterseite - an die $sBasketitem ran? Ich möchte den Warenkorbinhalt bspw. auf der Startseite des Shops anzeigen. Hierfür include ich aktuell die Templatedatei „frontend/checkout/ajax_cart.tpl“ - allerdings ist $sBasketitem dort leer. Hat jemand eine Idee? Viele Grüße

Hi, prinzipiell ist es so, dass Shopware diese Information nicht auf jeder Seite zur Verfügung hat. Du müsstest das also selbst an die View zuweisen, bspw aus einem Controller-Event-Callback so: $args-\>getSubject()-\>View()-\>assign('basketItems', Shopware()-\>Modules()-\>Basket()-\>sGetBasket()); Es gibt aber zwei Probleme damit: 1) Cache-Kompatiblität: Wenn du den HTTP-Cache nutzt, würde der WK-Inhalt eines Kunden für alle anderen Kunden gecacht - das ist natürlich schlecht. Entsprechend müsstest du das so umbauen, dass der WK-Inhalt per Action-Widget oder per Ajax-Call in die Seite gerendert wird. 2) Generelle Performance: Der „Gib mit alle Warenkorb-Positionen“-Call in SW ist relativ teuer, weil wir relativ aufwändig sicher stellen müssen, dass alle Preise passen und aktuell sind, der Kunde die Produkte kaufen darf etc. Hier hast du zwei Möglichkeiten: Entweder speicherst du den aktuellen WK des Benutzers in der Session zwischen, damit du den nicht immer aktiv auslesen musst, sondern der WK nur neu berechnet wird, wenn der Benutzer tatsächlich was dran ändert. Oder du liest die Daten mit einem relativ schnellen Query aus der s_order_basket aus - dafür brauchst du nur die Shopware()->SessionID() des benutzers als Schlüssel. Der Ansatz ist gut, wenn du nur die Positionen anzeigen möchtest, aber bspw. aktuelle Preise nicht wichtig sind. Insgesamt also gut machbar - wegen Caching und Performance muss man aber noch die o.g. Dinge beachten. Daniel

1 „Gefällt mir“

Hi Daniel, vielen Dank für deine ausführliche Antwort! Im Prinzip möchte ich eigentlich “nur” einen Miniwarenkorb (bei Hover auf das Cart-Icon soll der Inhalt aufgelistet werden) implementieren. Dafür benötige ich, wenn ich das richtig verstanden habe, das BasketItem, richtig? In Shopware4 ging das noch relativ einfach - gibt es diese Strukturen in Shopware5 nicht mehr? Viele Grüße, David