Artikelpreis im Warenkorb aktualisieren (5.2.2)

Hallo zusammen,

ich möchte im Warenkorb den Preis einzelner Artikel verändern. Bis zu einem gewissen Grad funktioniert es auch. Zuerst hole ich mir per “$sBasket = Shopware()->Modules()->Basket()->sGetBasket();” den Inhalt des Warenkorbs und lassen den durch einen Loop laufen der für jeden Artikel den Preis verändert (oder halt nicht). Das Ganze schreibe ich dann mit “UPDATE s_order_basket ob SET ob.price=?, ob.netprice=? WHERE ob.articleID=? AND ob.sessionID=? AND ob.modus=0” in die Datenbank. Bis dahin klappt das auch. Die Preise werden in der Datenbank korrekt geändert. Allerdings ändert sich nichts im Frontend. Lade ich dann den Warenkorb neu werden wieder die alten Preise in die Datenbank geschrieben. Irgendwo holt der sich also die Preise noch wieder her.

Ich habe jetzt dutzende Hooks und Events durchprobiert. Funktionieren tut “Enlight_Controller_Action_PostDispatch_Frontend_Checkout”. PreDispatch funktioniert nicht.

Vermutlich bin ich am völlig falschen Event dran aber ich bekommen nicht heraus wo ich mich anhängen kann und wie ich dann auch per AJAX den Warenkorb aktualisieren kann.

Kann mir jemand bitte einen Schubs in die richtige Richtung geben ?

Viele Grüße,

Martin

Bei jedem Aufruf von sGetBasket() werden die Preise erneut berechnet und zurück in die Datenbank geschrieben. Siehe shopware/sBasket.php at 5.2 · shopware/shopware · GitHub

Du musst dich also an die sUpdateArticle() hängen.

Viele Grüße

Vielen Dank für den Tipp aber mit der “sUpdateArticle” komme ich irgendwie nicht weiter. Ich habe mich jetzt an “sBasket::sGetBasket::before” gehängt. Dort kann ich z.B. die Menge oder die PartnerID ändern und die Änderungen werden auch dauerhaft in den Warenkorb übernommen. Beim Mengenänderungen wird auch der Preis korrekt neu berechnet. Allerdings komme ich weiter nicht an den Preis ran. Wenn ich mich an “sBasket::sGetBasket::before” hänge kann ich den Preis zwar in der DB ändern aber dann ist der klar beim nächsten Reload wieder weg.

Hänge ich mich an “sBasket::sUpdateArticle::before” passiert nichts. Bei “sBasket::sUpdateArticle::after” ebenfalls nicht.

Schau dir mal die Methode sUpdateArticle() genauer an - dann wirst du schon eine Lösung finden.

Viele Grüße

Hat sich erledigt. Mein Plugin funktioniert schon die ganze Zeit nur ein anderes Plugin greift ebenfalls in die Preise ein und wirft mich immer wieder raus. Sobald ich das andere Plugin deaktivere komme ich ohne Probleme an Menge und Preise ran. Jetzt muss ich also sehen ob das Plugin Events hat an die ich mich hängen kann. Vielen Dank für die Hilfe trotzdem.