Hallo, ich habe folgendes Szenario: Ich möchte über den url-controller (also ein eigen implementierter button) die anzahl eines bestimmtes produkt im warenkorb aktualisieren. ich habe in der engine/Shopware/Frontend/Controllers/Checkout.php etwas von updateArticle gelesen. /\*\* \* Change quantity of a certain product \* @param sArticle = The article to update \* @param sQuantity = new quantity \* Forward to cart / confirm view after success \*/ public function changeQuantityAction() { if($this-\>Request()-\>getParam('sArticle') && $this-\>Request()-\>getParam('sQuantity')) { $this-\>View()-\>sBasketInfo = $this-\>basket-\>sUpdateArticle($this-\>Request()-\>getParam('sArticle'), $this-\>Request()-\>getParam('sQuantity')); } $this-\>forward($this-\>Request()-\>getParam('sTargetAction', 'index')); }
Leider funktioniert es nicht. Es wird über AJAX oder POST kein Produkt aktualisiert. Meine Implentation im Template: [Anzahl auf 5 setzen]({url controller='checkout' action='changeQuantity' sArticle=1304 sQuantity=5})
Auch das Variieren von sArticle (Angabe der ordernumber) brachte nichts. Vielen Dank schon mal. Patrick
Hi Eine Antwort habe ich leider nicht aber wenn ich das [Anzahl auf 5 setzen]({url controller='checkout' action='changeQuantity' sArticle='87' sQuantity='5' sTarget='cart'})
in den Basket setzte wird bei erstaufruf der Seite die Anzhal auf 5 gesetzt, vielleicht nützt es um weiter zukommen? sArticle=‚87‘ Da muss nicht die Artikelnummer stehen sondern die aus dem HTML/Form: [code]
hey, danke für deine antwort. die idee mit sTarget bin ich noch nicht gekommen. Die ID stimmt bei mir. Es funktioniert auch soweit, dass er oben rechts im Warenkorb die Anzahl ändert. Allerdings wollte ich das ganze im Checkout also in dem Kassenbereich einsetzen. basket , confirm bzw. checkout als sTarget funktioniert leider nicht Am besten wäre es, wenn das gleiche wie beim Hinzufügen des Artikels kommt. Also eine Modalbox mit dem Artikel und der Anzahl. Danke schonmal Patrick
Hallo, der Controller Aufruf ist bereits von @Number7 richtig beschrieben worden: [Anzahl auf 8 setzen]({url controller='checkout' action='changeQuantity' sArticle='673' sQuantity='8' sTarget='cart'})
Die changeQuantityAction erwartet folgende Werte: sArticle Die ID des Artikels sQuantity Die neue Anzahl für das Produkt im Warenkorb sTarget Die Seite welche nach dem Aufruf geöffnet werden soll. Zum Beispiel cart für den Warenkorb oder confirm für die Abschluss-Seite. Ein Auswahlfeld für das Ändern der Anzahl eines Produktes ist im Warenkorb ja auch bereits implementiert. Wenn Du Dir dieses genauer anschauen möchtest schau doch am besten mal in die _default/frontend/checkout/cart_item.tpl. Ich hoffe ich konnte Dir damit weiterhelfen. Liebe Grüße, Phil
Danke für die Antwort. Allerdings ist es noch nicht ganz das wonach ich suche. Ich möchte innerhalb des Checkout Prozesses den Link aufrufen und es soll über Ajax (wie der addArticle-Controller) die Anzahl verändern. Mit dem changeQuantity wird es nur im Warenkorb oben rechts aktualisiert und nicht im Checkout Prozess. Ein Neuladen der Seite nach Klick auf den changeQuantity Link würde den Warenkorb zwar aktualisieren, aber dann würde zB der Inhalt des Kommentarfeldes wieder geleert. (ich schreibe bestimmte dinge in das kommentarfeld) Aber soweit ich gesehen habe gibt es die Methode nicht. Da ajaxAmount nur die Anzahl inner halb des kleinen Warenkorbs ausliest. Oder irre ich mich da? (hoffentlich) Also mein Ziel: Im Kassenbereich (checkout) die Anzahl eines sich im Warenkorb befindlichen Artikels über Ajax zu verändern. Danke schon mal.
Hallo, verstehe ich es also richtig, dass es Dir nur um die Anzeige geht? Denn Dein Ajax Call scheint ja zu funktionieren wenn der Warenkorb geändert wird? Oder funktioniert das auch schon nicht? Wenn Du nur die Anzeige der Warenübersicht ändern möchtest ohne die Seite neu zu laden, müsstest Du einfach in dem Callback Deines Ajax Calls bei einem “success” den Wert der Quantity Combobox ändern. Verstehe ich Dein Problem richitg? Liebe Grüße, Phil
Hey Phil, aber wenn ich innerhalb des Checkouts (also da wo der Button BEZAHLEN ist und zu PayPal oÄ weiterleitet) nur die Select/Combobox verändere, dann wird doch nicht gleichzeitig der Preis aktualisiert oder? Also müsste ich changeQuantity aufrufen und anstatt die Seite neuzuladen einfach die Combobox und irgendwie den Preis aktualisieren im Kassenbereich? (im Warenkorb oben rechts passiert das ja dann wohl schon) Gruß Patrick
Hey Patrick, die changeQuantity rufst Du ja mit Deinem Ajax Call auf. Dadurch wird die Quantity global schon geändert. Damit sich auch Deine Ansicht ändert musst Du in dem Ajax Callback dann Deine aktuelle Ansicht dynamisch ändern. Ich würde Einfach mal testen ob die Daten nach dem Aufruf der changeQuantity beim Checkout richtig übergeben werden. Normalerweise sollten die Daten im weiteren Prozess nach Aufruf der changeQuantity bereits richtig sein, auch wenn Deine Ansicht sich noch nicht dynamisch angepasst hat. Liebe Grüße, Phil
Hey Phil, okay, dann probiere ich das mal so. Wäre ja schonmal ein Anfang dafür. Danke für deine Hilfe! Gruß Patrick