Falscher Variablenwert in Ajax-Cart

Am letzen Arbeitstag in diesem Jahr wollte ich noch ein wenig die Zeit tot-schlagen und etwas am Shop “basteln”.

Konkret:
Den Warenkorbhinweis “noch xxx € bis zum kostenlosen Versand” möchte ich auch in der OffCanvas-Cart einbauen. (mit einem Link auf eine Kat mit Preisfilter wenn Wert unter xx EUR)
Dazu verwendet wird die Variable: {$sShippingcostsDifference} sie funktioniert grundsätzlich auch… ABER:
Sie wird bei der “Ajax-Aktion in den Warenkorb legen” nicht aktualisiert, erst nach einem echten Seitenaufruf  einem Aufruf der echten Cart wird diese Variable richtig gesetzt.
Ist das ein “BUG” oder ist das von “Shopware” einfach nur so gewollt / übersehen worden?

Nicht schön, wenn ich einen “Versandkostenfreien Artikel” in der Cart habe, ab noch XXX Eur bis zum “kostenfreien Versand” angezeigt werden.
WENN so eine Variable im Theme im Ajax-Template angeboten wird, sollte sie grundsätzlich auch den richtigen Wert haben. Dann lieber gar nicht die Variable ans Template übergeben, als einen falschen Wert  Wink

Hintergrund war bisher immer, dass der Off-Canvas noch keine Warenkorb-Berechnung durchführen soll, um so möglichst performant zu bleiben. Wenn jedes öffnen/schließen die Berechnung antriggert, ist das zusätzliche Performance.

Das Thema ist thematisch mit dem „Versandkosten im Warenkorb anzeigen“ verbunden. Das ist der gleiche grund, warum wir dort keine Versandkosten anzeigen. Der Off-Canvas ist so gebaut, dass er nur die Preise zusammenaddiert und keinen Warenkorb an sich berechnet. 

1 „Gefällt mir“

Kein Problem, muss ich mir 2019 selber was basteln  Wink
Er muss es ja nicht bei jedem „öffnen“ berechnen, es reicht ja bei einer „Aktion“ wie „reinlegen oder löschen“ und dann in die Session schreiben - macht die echte Cart ja auch, oder wo kommt der Wert sonst später her? Egal - guck ich mir mal für ein kleines Plugin an. Wearing-Sunglasses

Moin und ein frohes Neues…

neues Jahr, altes Problem - und gleich muß ich Dir ein wenig widersprechen *grins*

Betrachten wir die checkout.php ein wenig genauer:
Sowohl die reguläre Cart als auch die Ajax-Cart benutzen die gleiche Funktion zur Ermittlung der Daten - die Funktion getBasket().
Ab hier werden u.A. die sShippingcostsDifference  berechnet:
shopware/Checkout.php at 5.5 · shopware/shopware · GitHub
Für die AjaxCart wird dann hier der Wert gesetzt:
shopware/Checkout.php at 5.5 · shopware/shopware · GitHub
Für die reguläre Cart hier:
shopware/Checkout.php at 5.5 · shopware/shopware · GitHub

Inder cartAction() werden vor dem Aufruf von getBasket() wesentlich mehr Class-Variablen initialisiert, als in der ajaxCartAction() - was dann wohl zu einer fehlenden / fehlerhaften Differenz-Berechnung führen dürfte.

Der “Autor” der ajaxCart wird sich ja etwas dabei gedacht haben, dass er u.A.  sShippingcostsDifference  ans Theme übergeben möchte, aber dann bitte richtige Werte  Wink

Aktuell ist mein Basteltrieb eher wieder ein wenig erloschen, aber wenn ich den “Hinweis” dann doch mal wieder ausprobieren möchte, werde ich wohl mal die checkout.php ein wenig patchen müssen  Wearing-Sunglasses

1 „Gefällt mir“

Muss ich mir in der nächsten Woche nochmal genauer ansehen. Man lernt ja nie aus.

Willst du hier vielleicht noch ein Ticket einstellen?

Diese Woche ist Büro noch auf Sparflamme, ein bischen Server hier updaten, dort ein wenig Gerätewartung etc.
Ehe ich mich mit einem Ticket in die Nesseln setze, muss ich mich noch weiter damit befassen und ggf. noch ein bischen gegen testen  Wink
Wenn ich mir 100% sicher bin, mache ich dann ein Ticket auf  Wearing-Sunglasses