$wsDirectOrder-Modul können Sie den Zustand einer Direktbestellung ablesen. Dabei erfasst der Kunde die Produkte durch Eingabe ihrer Artikelnummern in einem Bestellschein, ohne sie einzeln im Shop suchen zu müssen. Anschließend übernimmt er alle erfassten Positionen in einem Schritt in den Warenkorb. Das Modul liefert die aktuelle Anzahl der Eingabezeilen sowie die bisher erfassten Positionen.
Auf dieser Seite geht es um das Lesen des Direktbestell-Zustands. Das Hinzufügen und Löschen von Positionen erfolgt über die Aktionen DirectOrderAdd / DirectOrderDelete.
Grundkonzept
Der Bestellschein ist ein Formular mit mehreren Eingabezeilen. In jede Zeile gibt der Kunde eine Artikelnummer und die entsprechende Menge ein. Beim Absenden prüft die AktionDirectOrderAdd, ob sich die Eingabe einem Produkt zuordnen lässt, und schreibt die Zeile in die Bestellschein-Liste der Session. In den Warenkorb gelangt dabei noch nichts.
Die Übernahme in den Warenkorb ist eigener, zweiter Schritt: Mithilfe des separaten Formulars und der Aktion BasketItemAdd werden alle erfassten Positionen auf einmal abgeschickt. Wie das aussieht, zeigt das Beispiel Positionen in den Warenkorb übernehmen.
$wsDirectOrder stellt den aktuellen Zustand bereit:
currentLines: wie viele Eingabezeilen aktuell angezeigt werden. Der Wert stammt aus der Konfiguration ($wsConfig.directOrder:initialNumberbismaximalNumber).items: die bereits erfassten Positionen, jeweils mitid,quantity,validundinsert.
Ungültige Eingaben
Eine ungültige Eingabe erzeugt keine Zeile initems. Wenn sich eine Artikelnummer keinem Produkt zuordnen lässt oder die Menge ungültig ist, meldet die Aktion DirectOrderAdd den Fehler über errorsByField. Wie Sie diese Meldungen ausgeben, zeigt das Beispiel Fehlermeldungen anzeigen.
Modulübersicht
Beispiel / Ausschnitt über$wsDirectOrder
Eigenschaften einer Bestellposition (
items[])
Templates
Der Bestellschein ist standardmäßig im Templatemodules/directOrder.htm zu finden. Verlinken Sie ihn beispielsweise im Footer (siehe Beispiel).
Variablen
$wsDirectOrder.currentLines
Gibt die aktuelle Anzahl der angezeigten Eingabezeilen aus. Der Wert wird über$wsConfig.directOrder konfiguriert (initialNumber als Start, maximalNumber als Obergrenze). Nutzen Sie ihn beispielsweise, um genau so viele Zeilen zu erzeugen.
$wsDirectOrder.items
Gibt die erfassten Bestellpositionen aus. Über den Zeilenindex können Sie auf eine bestimmte Position zugreifen (items[$index]).
Eigenschaften einer Bestellposition
Weil
id die ermittelte Produktnummer enthält, zeigt ein mit items[…].id vorbelegtes Eingabefeld nach dem Absenden nicht mehr die ursprüngliche Eingabe des Kunden. Genau diese Produktnummer benötigen Sie jedoch beim Übernehmen in den Warenkorb.Methoden
Für$wsDirectOrder stehen keine Methoden zur Verfügung.
Aktionen
$wsDirectOrder selbst stellt keine Aktionen bereit. Das Hinzufügen und Löschen von Positionen erfolgt über die Aktionen.
Beispiele
Bestellschein-Template
Dieses Beispiel erzeugt für jede konfigurierte Zeile (currentLines) eine Eingabereihe. range(0, currentLines - 1) liefert die Indizes 0 bis currentLines - 1. Pro Zeile werden die Aktionen DirectOrderAdd und DirectOrderDelete mit dem Zeilenindex als tag erzeugt, damit Eingaben und Fehler der richtigen Zeile zugeordnet werden. Der Filter ifNull('') setzt einen leeren Wert, falls die Zeile noch nicht erfasst wurde.
Ein Bestellschein mit so vielen Eingabereihen, wie
currentLines vorgibt. Bereits erfasste Zeilen haben ihre Artikelnummer und Menge vorbelegt.
Fehlermeldungen anzeigen
Die AktionDirectOrderAdd meldet feldbezogene Fehler über errorsByField. Dabei hängen nicht alle Fehler am selben Feld:
- Fehler zur Artikelnummer und zum Produkt finden Sie unter
errorsByField.id. - Fehler zur Menge stehen unter
errorsByField.quantity. - Fehler der Artikelnummern-Felder aus
itemNumberFieldsstehen unter dem Namen des jeweiligen Eingabefeldes, beispielsweiseerrorsByField.firstField. Dies betrifft die FehlermeldungenitemNumberCheckFailedundmissingIdbei einem leeren Pflichtfeld.
id) und zur Menge (quantity) je Zeile.
itemNumberFields auch Trennzeichen enthält und diese keinen Namen haben.
Bei einer fehlerhaften Eingabe - beispielsweise einer ungültigen Artikelnummer oder Menge - erscheint die entsprechende Meldung in der betreffenden Zeile.
Positionen in den Warenkorb übernehmen
Die mitDirectOrderAdd erfassten Positionen liegen zunächst nur in der Liste des Bestellscheins. Ein eigenes Formular übernimmt sie mit der Aktion BasketItemAdd in den Warenkorb. Dabei wird pro erfasster Position ein verstecktes Feld namens multiProducts.<Produktnummer>.quantity mitgeschickt. Bei aktivierter Werbemittelkennzeichnung kommt pro Position zusätzlich das Feld multiProducts.<Produktnummer>.insert hinzu.
Es gibt einen Button, der alle erfassten Positionen mit ihrer Menge und gegebenfalls ihrem Werbemittelkennzeichen in den Warenkorb legt. Solange keine Positionen erfasst sind, ist der Button deaktiviert.
Als Feldname dient die ermittelte Produktnummer aus
items[…].id, nicht die Eingabe des Kunden. Eine Variante wird so über multiProducts.<Produktnummer>.<Variante>.quantity übergeben. Ist eine der übergebenen Positionen ungültig, legt der Shop keine davon in den Warenkorb.Seite im Footer verlinken
Den Link zur Direktbestellung erzeugen Sie mitviewUrl(). Den Pfad zum Template als Argument übergeben.
Ein Link, der zur Direktbestell-Seite führt.
Weiterführende Links
- $wsActions – stellt die Aktionen
DirectOrderAdd/DirectOrderDeleteund die FehlerstrukturerrorsByFieldbereit. - $wsConfig.directOrder – konfiguriert Zeilenanzahl und zusätzliche Artikelnummer-Felder.
- Online-Bestellschein – ausführliches Praxisbeispiel.
- checkout - Bestellablauf – Konfiguration des Bestellablaufs.
- Basket: Aktion
BasketItemAddzum Übernehmen der Positionen in den Warenkorb.
