Zum Hauptinhalt springen
Um die Menge eines Produkts im Warenkorb zu ändern, muss der Käufer normalerweise zurück auf die Produktdetailansicht. Mit Plus- und Minusschaltflächen direkt in der Warenkorbzeile geht das in einem Schritt. Hmfile Hash 9b280d3d

Warum ein eigenes Formular nötig ist

Die Warenkorbseite kann eine Menge nicht selbst ändern. Zuständig dafür ist das Produktformular, dasselbe, mit dem ein Produkt in den Warenkorb gelegt wird. Es erwartet das Feld PR-Quantity_Input und gehört zur Produktdetailansicht, nicht zum Warenkorb. Die Lösung besteht deshalb aus zwei Formularen je Warenkorbzeile: Das versteckte Formular steht nicht von Anfang an auf der Seite. Es wird erst beim ersten Antippen der Bedienelemente für diese eine Position nachgeladen, über BASKET-PR-ChangeLink und ein eigenes kleines Template. Danach spiegelt das Skript jede Änderung in dieses Formular und sendet es ab. Die Antwort lädt den gesamten Warenkorb neu.
Jeder Klick auf Plus oder Minus ist ein eigener AJAX-Aufruf und verbraucht Leistungseinheiten.Wer eine Menge von 1 auf 10 klickt, löst zehn Aufrufe aus. Das Beispiel unten fasst schnell aufeinanderfolgende Klicks deshalb zu einem Aufruf zusammen.
Wegweiser: Produkt per AJAX in den Warenkorb legen · AJAX-Funktionen

Schritt 1: Die AJAX-Bibliothek einbinden

Die Versionsnummer im Dateinamen ist der Stand zum Zeitpunkt dieser Beschreibung. Prüfen Sie vor der Einbindung, welche Fassung aktuell ist. Bequemer ist die Einbindung über das PageSpeed-Werkzeug, das die Datei mitverwaltet.Ist das Modul in Ihrem Shop bereits global eingebunden, entfällt dieser Schritt.
Die Skripte auf dieser Seite verwenden jQuery. Prüfen Sie, ob Ihr Template es einbindet. Fehlt es, bleiben die Schaltflächen wirkungslos, und in der Konsole des Browsers steht $ is not defined.

Schritt 2: Die Anzeigebereiche anlegen

Innerhalb des Warenkorbformulars auf ws_basket.htm:
Außerhalb des Formulars, ein Zielcontainer je Warenkorbposition:
Die Zielcontainer gehören außerhalb des Warenkorbformulars. In sie wird später je ein eigenes Formular geladen, und Formulare dürfen in HTML nicht ineinander verschachtelt sein. aria-live="polite" sorgt dafür, dass Hilfsmittel die Änderung ansagen. Ohne diese Angabe tauscht sich der Warenkorb lautlos aus, und wer die Seite nicht sieht, merkt nicht, dass die Menge übernommen wurde.

Schritt 3: Die Bedienelemente in die Warenkorbzeile

Im Include {Incl-Basket}, innerhalb der Schleife über die Positionen:
Die Klammerung {ST-BasketPage} sorgt dafür, dass die Bedienelemente nur auf der Warenkorbseite erscheinen. Dasselbe Include wird an anderen Stellen für den Kurzwarenkorb verwendet, und dort genügt die reine Mengenangabe.
Die Schaltflächen brauchen aria-label. Enthalten sie nur ein Symbol, beispielsweise ein Icon aus einer Symbolschrift, hat die Schaltfläche für Hilfsmittel keinen Namen und wird als “Schaltfläche” angesagt.
type="number" mit min="1" gehört zum Mengenfeld, nicht type="text". Bei type="text" bleibt min wirkungslos, und auf Mobilgeräten erscheint die Buchstabentastatur. Referenz: BASKET-PR-Number · BASKET-PR-Quantity · BASKET-PR-ChangeLink · ST-BasketPage

Schritt 4: Das versteckte Produktformular

Legen Sie ein Template incl_basket_quantity_change.htm in Ihrem Templateverzeichnis an:
Referenz: WS-OTPX · FORM-Product · BT-ProductAddToBasket_Ajax · PR-PrintHiddenDepVariations · ST-PR_Change

Schritt 5: Die beiden AJAX-Antworttemplates

Auf ws_basket_ajax_error.htm:
Auf ws_basket_ajax_success.htm:
Der Erfolgsfall lädt den gesamten Warenkorb neu und nicht nur die geänderte Zeile. Das ist nötig, weil sich mit der Menge auch Zwischensumme, Versandkosten, Staffelpreise und Hinweise zu Mindestmengen ändern können. Wegweiser: Produkt per AJAX in den Warenkorb legen, Aufbau der AJAX-Templates

Schritt 6: Das Skript

Der erste Teil lädt das versteckte Formular nach, sobald der Käufer die Bedienelemente einer Position zum ersten Mal berührt:
Der zweite Teil spiegelt den Wert und sendet ab:

Was die einzelnen Teile leisten

Das versteckte Feld basket-pr-currentval hält den Wert, den der Shop zuletzt bestätigt hat. Lehnt der Shop eine Menge ab, beispielsweise wegen einer Höchstbestellmenge oder weil der Lagerbestand nicht reicht, springt die Anzeige damit auf den gültigen Stand zurück.
Die Plusschaltfläche kennt keine Obergrenze. Ist für das Produkt eine Höchstbestellmenge hinterlegt, merkt der Käufer das erst, wenn der Shop die Eingabe ablehnt und die Anzeige zurückspringt. Wenn Sie das vermeiden wollen, setzen Sie zusätzlich ein max-Attribut aus der Höchstbestellmenge des Produkts und blenden die Schaltfläche beim Erreichen aus.
Der Auslöser für das Nachladen ist mousedown und nicht click. Dadurch ist das versteckte Formular in der Regel schon da, wenn der Klick ausgewertet wird. Auf Geräten mit Touch-Bedienung löst der erste Druck dasselbe Ereignis aus.

Verwandte Themen