Zum Hauptinhalt springen
Mit den freien Feldern auf Split-Positionsebene bieten Sie dem Käufer Eingabefelder und Checkboxen an, die nicht zum Produkt gehören, sondern zur Bestellung: eine Geschenkverpackung, ein Wunschtermin, ein Grußtext. An jedes dieser Felder lassen sich Zusatzkosten hängen. Anders als bei den freien Eingabefeldern der Warenkorbposition (BASKET-PR-AdditionalUserInput_1…20) wird hier alles in der Shopkonfiguration shop.config im Abschnitt <BasketProductOptions> festgelegt: welche Felder es gibt, wo sie erscheinen, was sie kosten und wie die Eingabe geprüft wird. Die Tags mit dem Präfix BPO- geben diese Konfiguration im Template aus. Wegweiser: Freie Felder auf Split-Positionsebene · Referenz: Abschnitt <[BasketProductOptions](/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/warenkorb-und-bestellprozess#basketproductoptions)>

Der Aufbau im Template

Alle Tags dieser Gruppe stecken ineinander, und die Reihenfolge der Schachtelung ist vorgegeben.
Das mittlere Bereichs-Tag ist der Grund, warum derselbe Codeblock auf drei Templates funktioniert. Der Shop kennt nur eine aktive Verwendungsebene, und BPO-LevelOfUsage_XXX sorgt dafür, dass der Block nur auf dem dazu passenden Template etwas ausgibt. Je Shop ist immer nur eine Verwendungsebene aktiv. Sie können also nicht gleichzeitig ein Feld je Bestellung und ein Feld je Warenkorbposition anbieten.

Das vollständige Beispiel

Ohne die Schaltfläche BT-BPO_Refresh gehen die Eingaben verloren. Sie schreibt die Werte in den Warenkorb zurück. Die einzige Ausnahme ist die Produktdetailansicht: dort stehen die Felder innerhalb von ~FORM-Product~ und werden zusammen mit dem Produkt in den Warenkorb übernommen.
Referenz: BT-BPO_Refresh

Die Verwendungsebene

Welche der drei Ebenen gilt, legt der Parameter LevelOfUsage im Abschnitt <BasketProductOptions> fest. Jede Ebene hat ihr eigenes Bereichs-Tag und ihren eigenen Platz im Template.

BPO-UseOnce

Klammert bei der Ebene Once den gesamten Block. Es steht eine Stufe über BPO-Data und ist das einzige Tag dieser Gruppe, das außerhalb der Schleife steht.
Die beiden Tags wirken auf den ersten Blick doppelt gemoppelt. BPO-UseOnce gehört aber zur Warenkorbseite und hält den Block aus der Positionsschleife heraus, BPO-LevelOfUsage_Once prüft die Einstellung des einzelnen Felderblocks. Bei den anderen beiden Ebenen entfällt BPO-UseOnce.

BPO-LevelOfUsage_BasketPositionAddress

Greift, wenn die Felder je Lieferadresse innerhalb einer Warenkorbposition gelten. Das setzt die Funktion Split-Order voraus, also das Aufteilen einer Position auf mehrere Lieferadressen.
Der Block muss auf der Bestellübersichtsseite zweimal stehen: einmal in {@BASKET-PR-D-MultiData} und einmal in {BASKET-PR-D-SingleData}. Der Käufer kann auch bei aktiver Split-Order für eine Position nur eine Lieferadresse wählen, und dann greift der zweite Bereich.
Wegweiser: Eine Warenkorbposition aufteilen und an mehrere Lieferadressen senden · Referenz: BASKET-PR-D-MultiData, BASKET-PR-D-SingleData

Die Schleife über die Felderblöcke

BPO-Data

Schleife über die in <BasketProductOptions> konfigurierten Felderblöcke. Je Durchlauf stehen die Felder und die Kostenberechnungen eines Blocks zur Verfügung.
Alle übrigen Tags dieser Gruppe außer BPO-UseOnce und BPO-AllCosts_Sum sind nur innerhalb dieser Schleife zulässig. Außerhalb liefern sie nichts, weil ihnen der Bezug zum Felderblock fehlt.

BPO-ID

Gibt den Bezeichner des Felderblocks aus, also den Wert von BasketProductOptionID aus der Shopkonfiguration.
Für den Käufer ist der Bezeichner ohne Bedeutung. Nützlich ist er als Haken für CSS und JavaScript, wenn mehrere Felderblöcke unterschiedlich aussehen sollen.

Die Eingabefelder

BPO-Input

Schleife über die Felder des Blocks. Als Einzel-Tag gibt es die Anzahl der konfigurierten Felder aus.

BPO-Input_Type_Input und BPO-Input_Type_Checkbox

Die beiden Bereichs-Tags unterscheiden die Feldart. BPO-Input_Type_Input greift beim Texteingabefeld, BPO-Input_Type_Checkbox bei der Checkbox.
Das zweite, versteckte Feld bei der Checkbox ist kein Schreibfehler. Ein nicht angehakter Haken schickt gar nichts ab, der Shop könnte also nicht zwischen “abgewählt” und “Formular nie abgeschickt” unterscheiden. Das Feld mit dem Zusatz _hidden ist immer gesetzt und meldet, dass dieser Haken überhaupt im Formular stand. Ohne dieses Feld lässt sich eine einmal gesetzte Checkbox nicht wieder abwählen.

BPO-Input_ID und BPO-Input_input

BPO-Input_ID gibt den Bezeichner des Feldes aus der Shopkonfiguration aus, BPO-Input_input den technischen Feldnamen für das name-Attribut.
Das name-Attribut muss aus BPO-Input_input kommen. Ein selbst vergebener Name wird beim Absenden nicht erkannt, und die Eingabe ist verloren.

BPO-Input_value

Gibt zurück, was der Käufer eingetragen hat. Beim Texteingabefeld ist das der Text, bei der Checkbox der Wert on. Als Bereichs-Tag greift es, sobald das Feld ausgefüllt beziehungsweise angehakt ist.
Auf der Bestellübersichtsseite ist die Ausgabe ohne Eingabefeld sinnvoll, damit der Käufer seine Angaben vor dem Absenden noch einmal sieht. Dafür genügen BPO-Data, BPO-Input und BPO-Input_value ohne die LevelOfUsage-Klammerung.

BPO-Input_error

Gibt die Fehlermeldung aus, die in der Shopkonfiguration für die Eingabeprüfung dieses Feldes hinterlegt ist. Als Bereichs-Tag greift es nur, wenn die Prüfung tatsächlich fehlgeschlagen ist.
Die Meldung stammt aus dem Abschnitt <GenericInputChecks>, verknüpft über den Parameter +UseGenericInputCheck des Feldes. Sie gehört direkt neben das Feld und nicht an den Seitenkopf, sonst sucht der Käufer bei mehreren Feldern das falsche. Referenz: Abschnitt <[GenericInputChecks](/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/adressen-und-eingabepruefung#genericinputchecks)>

BPO-Input_costs

Gibt die Zusatzkosten aus, die an diesem einen Feld hängen.
Das ist die Ausgabe am Feld, nicht die Abrechnung. Den tatsächlich berechneten Betrag liefert BPO-Costs_Sum, die Summe über alle Felderblöcke BPO-AllCosts_Sum.

Die Zusatzkosten

Kosten hängen nicht am Feld, sondern am Felderblock. Ein Block kann mehrere Kostenberechnungen haben, und jede Berechnung hat eigene Bedingungen. Deshalb gibt es neben der Feldschleife eine zweite Schleife.

BPO-Costs

Schleife über die Kostenberechnungen des Blocks. Als Einzel-Tag gibt es deren Anzahl aus.

BPO-Costs_Valid und BPO-Costs_Sum

BPO-Costs_Valid greift, wenn die konfigurierten Bedingungen dieser Kostenberechnung erfüllt sind. BPO-Costs_Sum gibt den berechneten Betrag aus und greift als Bereichs-Tag, wenn ein Betrag anfällt.
Die Kosten fallen an, sobald die Bedingungen der Berechnung erfüllt sind, und nicht erst, wenn der Käufer das Feld ausfüllt. Die einzige Ausnahme ist eine Bedingung, die genau darauf prüft (Proof = BasketProductOptionInputID mit Type = filled). Eine Kostenberechnung ohne Bedingung schlägt also immer zu, auch bei leerem Feld.
Zeigen Sie die Kosten nur innerhalb von {BPO-Costs_Valid} an. Die Schleife läuft über alle konfigurierten Berechnungen, auch über die, deren Bedingungen gerade nicht zutreffen.

BPO-Costs_ID, BPO-Costs_Name und BPO-Costs_Value

BPO-Costs_Value ist der Wert aus der Konfiguration, nicht das Ergebnis. Bei percentualSum steht dort der Prozentsatz und bei multiplyWithQuantity der Betrag je Stück. Was der Käufer zahlt, steht in BPO-Costs_Sum.

Die Art der Berechnung

Drei Bereichs-Tags zeigen an, nach welcher Regel gerechnet wird. Es greift immer genau eines.
Die drei Tags sind vor allem beim Einrichten nützlich, um zu sehen, welche Regel greift. Dem Käufer gegenüber genügt in aller Regel der fertige Betrag aus BPO-Costs_Sum.

BPO-AllCosts_Sum

Gibt die Summe aller Zusatzkosten über sämtliche Felderblöcke aus. Als Bereichs-Tag greift es, wenn überhaupt Kosten anfallen.
Dieses Tag steht außerhalb der BPO-Data-Schleife und gehört in den Rechnungsfuß neben Versand und Zahlung. Es ist der einzige Wert dieser Gruppe, der die Bestellsumme sichtbar erklärt.

Die Tags im Überblick

Zulässig sind die Tags auf der Produktdetailansicht (ws_product.htm), der Warenkorbseite (ws_basket.htm) und der Bestellübersichtsseite (ws_place_order.htm). Mit diesen Ausnahmen: Alle Tags außer BPO-UseOnce und BPO-AllCosts_Sum stehen zusätzlich nur innerhalb der BPO-Data-Schleife.

Verwandte Themen

  • Wegweiser: Freie Felder auf Split-Positionsebene
  • Referenz: Abschnitt <BasketProductOptions>
  • Referenz: Abschnitt <GenericInputChecks>
  • Referenz: BT-BPO_Refresh
  • Referenz: Positionen im Warenkorb