Zum Hauptinhalt springen
Beim BestPrice-Order-Modul sinkt der Preis eines Produkts, je mehr Kunden es vorbestellen. Diese Seite enthält ein vollständiges Beispiel-Template für den Bestellvorgang und beschreibt die Parameter des Preisstaffel-Diagramms. Passen Sie das Template an Ihr Shop-Design an. Alle Beschriftungen darin sind Beispieltexte. Wegweiser: BestPrice-Order-Modul · Referenz: E-BP-Tags

Voraussetzungen im Template

Das Diagramm ist ein eigenes JavaScript-Modul, das zwei Dinge im Template braucht: ein canvas-Element und zwei script-Blöcke.

Das canvas-Element

Das Plugin ist im Framework Solid.js geschrieben und zeichnet das Diagramm in ein canvas-Element. Dieses Element müssen Sie im Template vorsehen.
Höhe und Breite des canvas-Elements berechnet das Modul selbst und überschreibt dabei die Werte im Markup. Die Berechnung richtet sich nach dem Style des umgebenden Elements. Geben Sie dem Container deshalb eine Höhe, sonst bleibt das Diagramm unsichtbar.

Die beiden script-Blöcke

Der erste Block lädt das Modul, der zweite konfiguriert und startet es.
Referenz: WEBSALE JavaScript-Bibliothek

Das Beispiel-Template

Das Template deckt alle drei Schritte des Bestellvorgangs ab und zeigt zusätzlich eine Zusammenfassung aller Reservierungen des Kunden.

Die drei Schritte des Bestellvorgangs

Das Modul kennt drei Seitenzustände. Welcher gerade gilt, fragen Sie mit den drei gleichnamigen Abschnitts-Tags ab. Weitergeschaltet wird über das Formularfeld wsbp_act. Die Formularfelder, die das Modul auswertet:
An der Mengeneingabe im ersten Schritt hängt ein onblur an, das über ws_AJAXloadTemplate die Seite neu lädt. Erst dadurch aktualisieren sich Diagramm und Staffelpreis, während der Kunde die Menge ändert.Die beiden Tags ~WS-DisableAmpersandLinkEncoding~ und ~WS-EnableAmpersandLinkEncoding~ schalten die kaufmännische Und-Kodierung im Link ab und wieder an. Ohne sie wird das & im nachgehängten amount-Parameter zu & und der Aufruf schlägt fehl.

Konfiguration des Preisstaffel-Diagramms

Die Parameter übergeben Sie als Objekt an newBulkBestPrice. Parameter mit Sternchen sind notwendig, alle anderen optional.
JavaScript unterscheidet bei Objektschlüsseln Groß- und Kleinschreibung, deshalb sind die Namen hier an das funktionierende Beispiel angeglichen.Der Name totalMount ist ein Schreibfehler des Moduls. Er muss trotzdem genau so geschrieben werden.
Im text-Feld ist nur die HTML-Entity für das Euro-Zeichen ersetzbar. Für jedes andere Währungssymbol verwenden Sie den Unicode-Wert, im Beispiel €.

Der Zähler im dataBar-Array

Das Array braucht zwischen den Einträgen Kommas, aber keines vor dem ersten. Das Beispiel löst das mit einem Zähler:
DC-Counter1_inc zählt bei jedem Durchlauf hoch, und die negative Klammerung {!DC-Counter1(1)} setzt das Komma überall außer im ersten Durchlauf. Dasselbe Muster können Sie für jede andere JSON-Struktur im Template verwenden.

Der NO_PARSING-Block in der Reservierungsliste

In der Reservierungsliste steht ein Konstrukt, das auf den ersten Blick verwirrt:
PR-AdvData erwartet einen Produktindex als Parameter, der hier erst zur Laufzeit aus ~E-BP_ProdIndex~ kommt. Ohne NO_PARSING würde der Parser das halbfertige Tag sofort auswerten und scheitern. Die NO_PARSING-Klammern schützen die beiden Hälften, sodass erst der zusammengesetzte Ausdruck geparst wird.

Weitere E-BP-Tags

Das Beispiel nutzt nur einen Teil der verfügbaren Tags. Die folgenden kommen darin nicht vor. Außerdem nehmen ~E-BP_Begin~ und ~E-BP_End~ einen Formatparameter entgegen, beispielsweise ~E-BP_Begin(%d.%m.%Y)~. Ohne Parameter geben sie das Standardformat aus.

Die Adressfelder

Das Beispiel zeigt innerhalb von E-BP_BillingAddress und E-BP_DeliveryAddress nur Vor- und Nachnamen. Verfügbar ist die vollständige Adresse.

Häufige Fehlerquellen beim Nachbauen

Drei Punkte fallen beim Nachbauen auf.
E-BP_CompletePrice funktioniert nicht als Abschnitt. Die Abschnittsprüfung ist im Modul unter dem verschriebenen Namen complteprice hinterlegt. Als Einzel-Tag arbeiten ~E-BP_CompletePrice~ und ~E-BP_CompletePrice_format~ normal, nur die Klammerung {E-BP_CompletePrice}…{/E-BP_CompletePrice} greift nicht. Prüfen Sie stattdessen auf {E-BP_Orders}, ob überhaupt Reservierungen vorliegen.
E-BP_NewCompletePrice und E-BP_NewCompleteSaving gibt es nur als Einzel-Tag, nicht als Abschnitt. Sie liefern die Summe aus allen bisherigen Reservierungen und dem gerade laufenden Vorgang.E-BP_BillingAddress und E-BP_DeliveryAddress sind reine Umschalter auf den jeweiligen Adressdatensatz. Sie sind immer wahr, und eine negative Klammerung {!E-BP_BillingAddress} bewirkt nichts. Ob überhaupt eine Adresse vorliegt, fragen Sie mit E-BP_HAS-ADDRESS beziehungsweise E-BP_HAS-DELIVERY-ADDRESS ab.
Die Schreibweise der Tags ist dem Modul gleichgültig. ~E-BP_CurrentPrice_Format~ und ~E-BP_CurrentPrice_format~ sind dasselbe Tag, weshalb die uneinheitliche Schreibweise im Beispiel ohne Folgen bleibt.

Die Zustände einer Kampagne

Drei Abschnitts-Tags fragen den Status der Kampagne ab. Sie schließen einander aus. Im Beispiel umschließt E-BP_ACTIVE die Bestellschaltfläche. Behalten Sie das bei, sonst sieht der Kunde nach dem Ende der Kampagne eine Schaltfläche, die ins Leere läuft.