Inhalt
1 Freie Text-Eingabefelder im Warenkorb auf Positionsebene
2 Freie Felder (Input/Checkbox) auf Split-Positionsebene
Hinweis: |
|
Wenn Sie Texteingabefelder zum Produkt auf der Produktdetailansicht (ws_product.htm) wollen, finden Sie die Integrationsanleitung unter Wegweiser: Texteingabefelder zum Produkt |
1. Freie Text-Eingabefelder im Warenkorb auf Positionsebene
Um beispielsweise den gewünschten Lieferzeitpunkt pro Position anzugeben, bietet WEBSALE V8s für die Warenkorbseite (ws_basket.htm) freie Eingabefelder zur Aufnahme beliebiger Informationen. Je Position im Warenkorb sind 20 Felder verfügbar, die im Bestellprozess editiert werden können. Jedes der Felder kann maximal 4048 Zeichen enthalten.
Schritt 1: Freischaltung/Aktivierung
Für diese Funktion ist keine Freischaltung/Aktivierung seitens WEBSALE notwendig.
Schritt 2: Zeichen entfernen (optional)
Ergänzen Sie in der Shopkonfiguration shop.config im Abschnitt BasketEntries den Parameter AdditionalInput-RemoveSigns und tragen Sie alle Zeichen ein, die aus den Eingaben des Kunden in den Warenkorbfeldern entfernt werden sollen.
<BasketEntries>
AdditionalInput-RemoveSigns = "*|~%${};"<>§·@ ()/-"
</BasketEntries>
Referenz: Abschnitt BasketEntries
Schritt 3: Einfügen der Eingabefelder auf der Warenkorbseite (ws_basket.htm)
Fügen Sie die gewünschten Eingabefelder (1-20) auf der Warenkorbseite (ws_basket.htm) ein.
{BASKET-PR-Data}
{@BASKET-PR-Data}
...
<input type="text" value="~BASKET-PR-AdditionalUserInput_1~" name="~BASKET-PR-AdditionalUserInput_input_1~" >
{BT-AdditionalUserInput}<input type="submit" value="speichern" name="~BT-AdditionalUserInput~" >{/BT-AdditionalUserInput}
...
{/@BASKET-PR-Data}
{/BASKET-PR-Data}
Referenz: BASKET-PR-AdditionalUserInput_1…20
Referenz: BASKET-PR-AdditionalUserInput_input_1…20
Referenz: BASKET-PR-Data
Referenz: BT-AdditionalUserInput
Schritt 4: Ausgeben der Inhalte der Eingabefelder
Die Inhalte der Eingabefelder können auf allen Shopseiten angezeigt werden, auf denen Inhalte des Warenkorbs verfügbar sind, z. B. auf der Bestellübersichtsseite (ws_place_order.htm).
{BASKET-PR-Data}
{@BASKET-PR-Data}
...
{BASKET-PR-AdditionalUserInput_1}
~BASKET-PR-AdditionalUserInput_1~
{/BASKET-PR-AdditionalUserInput_1}
...
{/@BASKET-PR-Data}
{/BASKET-PR-Data}
Referenz: BASKET-PR-AdditionalUserInput_1…20
Haben Sie alle Schritte durchgeführt, ist die Funktion "Freie Eingabefelder im Warenkorb auf Positionsebene" vollständig integriert.
2. Freie Felder (Input/Checkbox) auf Split-Positionsebene (BasketProductOptions)
Mit dieser Funktion können Sie Eingabefelder oder Checkboxen auf der Produktdetailansicht (ws_product.htm), der Warenkorbseite (ws_basket.htm) oder der Bestellübersichtsseite (ws_place_order.htm) einfügen. Durch unterschiedliche Integrationsvarianten können die Felder flexibel eingesetzt werden:
•einmalig pro Bestellung (LevelOfUsage = UseOnce)
•für jede einzelne Warenkorbposition (LevelOfUsage = UseForEachBasketPosition)
•für jede einzelne Lieferadresse bei Split-Order (mehrere Lieferadressen für eine Warenkorbposition) (LevelOfUsage = UseForEachUsedDeliveryAddress)
Beachten Sie, dass nur eine Art der Integration gleichzeitig aktiv im Shop sein kann.
Für diese Inputs können Sie zusätzliche Kosten, verschiedene Abhängigkeiten (z. B. zu Produktnummern, Bestellwert, usw.) oder eine Prüfung der Eingabe konfigurieren.
Schritt 1: Freischaltung/Aktivierung
Für diese Funktion ist keine Freischaltung/Aktivierung seitens WEBSALE notwendig.
Schritt 2: Änderungen in der Shopkonfiguration shop.config
Ergänzen Sie Ihre Shopkonfiguration shop.config mit dem neuen Abschnitt <BasketProductOptions> und konfigurieren die Parameter. Optional können Sie zusätzliche Kosten für jedes Feld festlegen.
In folgendem Konfigurationsbeispiel werden für jedes Produkt ein Eingabefeld BPO-Input-ID-1 und eine Checkbox BPO-Input-ID-2 angeboten. Diese Felder befinden sich auf der Produktdetailansicht (ws_product.htm) (siehe unten Integrationsvariante 2a). Für jedes ausgefüllte Eingabefeld sollen 5 € Zusatzkosten berechnet werden, für eine aktivierte Checkbox 2 €.
<BasketProductOptions>
BasketProductOptionsVATType = dynamic
BasketProductOptionsVATIndex =
<+BasketProductOption>
LevelOfUsage = UseForEachBasketPosition # [UseOnce|UseForEachBasketPosition|UseForEachUsedDeliveryAddress]
Test = yes
BasketProductOptionID = BPO-ID-1 # eindeutiger Bezeichner, alphanumerisch
<Inputs>
<+Input>
Type = Input
ID = BPO-Input-ID-1 # eindeutiger Bezeichner, alphanumerisch
Name =
+UseGenericInputCheck = # ID aus dem Abschnitt <+GenericInputCheck> (optional)
</+Input>
<+Input>
Type = Checkbox
ID = BPO-Input-ID-2 # eindeutiger Bezeichner, alphanumerisch
Name =
+UseGenericInputCheck = # ID aus dem Abschnitt <+GenericInputCheck> (optional)
</+Input>
...
</Inputs>
<Costs>
<+Cost>
ID = BPO-Cost-ID-1 # eindeutiger Bezeichner, alphanumerisch
Name = BPO-Zusatzkosten-Input # eindeutiger Bezeichner, alphanumerisch
Type = singleFixCost # [singleFixCost|percentualSum|multiplyWithQuantity] Art der Kostenberechnung
Value = 5.00
<+ConditionGroup>
<+Condition>
Proof = BasketProductOptionInputID # Legt fest, was geprüft werden soll
Type = filled # Art der Prüfung
Value = BPO-Input-ID-1 # Wert
</+Condition>
</+ConditionGroup>
</+Cost>
<+Cost>
ID = BPO-Cost-ID-2 # eindeutiger Bezeichner, alphanumerisch
Name = BPO-Zusatzkosten-Checkbox # eindeutiger Bezeichner, alphanumerisch
Type = singleFixCost # [singleFixCost|percentualSum|multiplyWithQuantity] Art der Kostenberechnung
Value = 2.00
<+ConditionGroup>
<+Condition>
Proof = BasketProductOptionInputID # Legt fest, was geprüft werden soll
Type = filled # Art der Prüfung
Value = BPO-Input-ID-2 # Wert
</+Condition>
</+ConditionGroup>
</+Cost>
...
</Costs>
</+BasketProductOption>
...
</BasketProductOptions>
Referenz: Abschnitt <BasketProductOptions>
Hinweis: |
|
Die zusätzlichen Kosten werden stets berechnet, auch wenn der Käufer das Eingabefeld leer lässt oder die Checkbox nicht anhakt. Dagegen werden bei der Prüfung der Eingabefelder selber (Proof = BasketProductOptionInputID, Type = filled) keine Kosten berechnet, wenn der Kunde das Feld leer lässt. |
Schritt 3: Bedingungen in der Shopkonfiguration shop.config festlegen (optional)
Falls Sie die freien Felder nur in bestimmten Fällen anzeigen wollen (z. B. abhängig von Produktnummer, Gesamtbestellwert, Split-Order, usw.), ergänzen Sie den Unterabschnitt <+BasketProductOptions> mit einem Requirements-Abschnitt.
...
<+BasketProductOption>
...
<Requirements>
<+RequirementGroup>
<+Requirement>
Proof = ProductNumber
Type = inlist
Value = A-12345,B-4321,C-56789,D-3434
Identifier =
</+Requirement>
...
</+RequirementGroup>
...
</Requirements>
...
</+BasketProductOption>
...
Referenz: Abschnitt <Requirements>
Schritt 4: Eingabeprüfung in der Shopkonfiguration shop.config einrichten (optional)
Wenn Sie die Prüfung eines Eingabefeldes benötigen, fügen Sie den Abschnitt <GenericInputChecks> in die Shopkonfiguration shop.config ein und konfigurieren die Parameter entsprechend. Die Zuweisung erfolgt über die ID aus dem Abschnitt <+GenericInputCheck>. Diese ID muss bei den BasketProductOptions in den Parameter +UseGenericInputCheck im Abschnitt <+Input> eingetragen werden.
<GenericInputChecks>
<GenericInputCheckDefaults>
RemoveSigns = "*|~%${};"<>§·@ ()/-"
</GenericInputCheckDefaults>
<+GenericInputCheck>
ID = # ID für die Zuordnung im Parameter +UseGenericInputCheck
RemoveSigns =
Type = minlen
ErrorMessage = Bei Ihrer Eingabe ist ein Fehler aufgetreten. Geben Sie mindestens ein Zeichen ein.
Signs =
RegEx =
Len = 1
List =
</+GenericInputCheck>
...
</GenericInputChecks>
Referenz: Abschnitt <GenericInputChecks>
Schritt 5: Fehlermeldung einfügen
Ergänzen Sie den Abschnitt <NotifyMessages-Txt> in der Shopkonfiguration shop.config mit einer passenden Fehlermeldung:
<NotifyMessages-Txt>
...
BPOInputCheckError = Bei den freien Feldern ist ein Fehler aufgetreten (BPO Error) - Geben Sie mindestens ein Zeichen ein!
...
</NotifyMessages-Txt>
Referenz: Abschnitt <NotifyMessages-Txt>
Schritt 6: Wählen der gewünschten Integrationsvariante
Wählen Sie ein Code-Beispiel der folgenden 4 Integrationsvarianten entsprechend Ihrer Festlegung im Abschnitt <+BasketProductOption> der Shopkonfiguration shop.config mit dem Parameter LevelOfUsage (UseOnce|UseForEachBasketPosition|UseForEachUsedDeliveryAddress).
Da die freien Eingabefelder auf unterschiedlichen Templates integriert werden können, sehen Sie zunächst nur die Klammerung mit dem Bereichs-Tag BPO-LevelOfUsage_XYZ.
Je nach Verwendung kopieren Sie den Code auf die Templates der Produktdetailansicht (ws_product.htm), Warenkorbseite (ws_basket.htm) oder Bestellübersichtsseite (ws_place_order.htm).
Variante 1: Integration auf der Warenkorbseite (ws_basket.htm) für die einmalige Verwendung (UseOnce) pro Bestellung (außerhalb dem BASKET-PR-Data-Bereich)
...
{BPO-UseOnce} <!-- nur bei LevelOfUsage_Once -->
{@BPO-Data}
{BPO-LevelOfUsage_Once}
{@BPO-Input}
... <!-- Code siehe unten -->
{/@BPO-Input}
{@BPO-Costs}
... <!-- Code siehe unten -->
{/@BPO-Costs}
{/BPO-LevelOfUsage_Once}
{/@BPO-Data}
{/BPO-UseOnce} <!-- nur bei LevelOfUsage_Once -->
...
<input type="submit" value="speichern" name="~BT-BPO_Refresh~">
...
Referenz: BPO-UseOnce
Referenz: BPO-LevelOfUsage_Once
Variante 2a: Integration auf der Produktdetailansicht (ws_product.htm) für die Verwendung pro Warenkorbposition (UseForEachBasketPosition) (innerhalb der "FORM-Product")
...
<form action="~FORM-Product~" method="Post" id="productform">
...
{@BPO-Data}
{BPO-LevelOfUsage_BasketPosition}
<!-- Code siehe unten -->
{@BPO-Input}
...
{/@BPO-Input}
{@BPO-Costs}
...
{/@BPO-Costs}
<!-- Code siehe unten -->
{/BPO-LevelOfUsage_BasketPosition}
{/@BPO-Data}
...
</form>
...
Referenz: BPO-LevelOfUsage_BasketPosition
Referenz: FORM-Product
Der Button BT-BPO_Refresh ist auf der Produktseite nicht notwendig, weil alle Eingaben innerhalb der FORM-Product automatisch in den Warenkorb übernommen werden.
Variante 2b: Integration auf der Warenkorbseite (ws_basket.htm) für die Verwendung pro Warenkorbposition (UseForEachBasketPosition) (innerhalb der BASKET-PR-Data-Schleife)
...
{BASKET-PR-Data}
{@BASKET-PR-Data}
...
{@BPO-Data}
{BPO-LevelOfUsage_BasketPosition}
<!-- Code siehe unten -->
{@BPO-Input}
...
{/@BPO-Input}
{@BPO-Costs}
...
{/@BPO-Costs}
<!-- Code siehe unten -->
{/BPO-LevelOfUsage_BasketPosition}
{/@BPO-Data}
...
{/@BASKET-PR-Data}
{/BASKET-PR-Data}
...
<input type="submit" value="speichern" name="~BT-BPO_Refresh~">
...
Variante 3: Integration auf der Bestellübersichtsseite (ws_place_order.htm) für die mehrfache Verwendung bei mehreren Lieferadressen pro Warenkorbposition (UseForEachUsedDeliveryAddress) (jeweils innerhalb des BASKET-PR-D-MultiData- und BASKET-PR-D-SingleData-Bereichs)
Für diese Integrationsvariante muss die Funktion "Eine Warenkorbposition aufteilen und an mehrere Lieferadressen senden (Split-Order)" aktiv sein:
Wegweiser: Eine Warenkorbposition aufteilen und an mehrere Lieferadressen senden (Split-Order)
Die freien Felder erscheinen auf der Bestellübersichtsseite (ws_place_order.htm) nachdem der Käufer auf der Seite der Rechnungs- und Lieferadressen (CombinedAddress) "An mehrere Adressen liefern" ausgewählt hat.
Der Code aus Schritt 7 muss dabei an 2 Stellen eingefügt werden, da der Käufer auch bei Split-Order nur eine Lieferadresse für eine Warenkorbposition wählen kann.
{@BASKET-PR-D-MultiData}
...
{@BPO-Data}
{BPO-LevelOfUsage_BasketPositionAddress}
<!-- Code siehe unten -->
{@BPO-Input}
...
{/@BPO-Input}
{@BPO-Costs}
...
{/@BPO-Costs}
<!-- Code siehe unten -->
{/BPO-LevelOfUsage_BasketPositionAddress}
{/@BPO-Data}
...
{/@BASKET-PR-D-MultiData}
...
{BASKET-PR-D-SingleData}
...
{@BPO-Data}
{BPO-LevelOfUsage_BasketPositionAddress}
<!-- Code siehe unten -->
{@BPO-Input}
...
{/@BPO-Input}
{@BPO-Costs}
...
{/@BPO-Costs}
<!-- Code siehe unten -->
{/BPO-LevelOfUsage_BasketPositionAddress}
{/@BPO-Data}
...
{/BASKET-PR-D-SingleData}
...
<input type="submit" value="speichern" name="~BT-BPO_Refresh~">
...
Referenz: BPO-LevelOfUsage_BasketPositionAddress
Referenz: BASKET-PR-D-MultiData
Referenz: BASKET-PR-D-SingleData
Schritt 7: Integration der Felder
Fügen Sie nun das allgemeine Code-Beispiel für die Eingabefelder/Checkbox und die Zusatzkosten zwischen die bestehenden Bereich-Tags BPO-LevelOfUsage_XYZ ein.
Allgemeine Integration der Texteingabefelder und/oder Checkboxen, der Anzeige der zusätzlichen Kosten und des Buttons zum Speichern der Eingabe:
{@BPO-Data}
{BPO-LevelOfUsage_XYZ}
{@BPO-Input}
{BPO-Input_Type_Input}
<input type="text" name="~BPO-Input_input~" {BPO-Input_value}value="~BPO-Input_value~"{/BPO-Input_value}>
{/BPO-Input_Type_Input}
{BPO-Input_Type_Checkbox}
<input type="checkbox" name="~BPO-Input_input~" {BPO-Input_value}checked{/BPO-Input_value}>
<input type="checkbox" name="~BPO-Input_input~_hidden" style="display:none" checked>
{/BPO-Input_Type_Checkbox}
{BPO-Input_error}
Fehlermeldung: ~BPO-Input_error~
{/BPO-Input_error}
{/@BPO-Input}
{@BPO-Costs}
Costs-ID: ~BPO-Costs_ID~<br>
Name: {BPO-Costs_Name}~BPO-Costs_Name~{/BPO-Costs_Name}{!BPO-Costs_Name}keine Bezeichnung der Kosten{/!BPO-Costs_Name}<br>
Value: {BPO-Costs_Value}~BPO-Costs_Value~{/BPO-Costs_Value}{!BPO-Costs_Value}kein Wert{/!BPO-Costs_Value}<br>
Type: {BPO-Costs_Type_singleFixCost}singleFixCost = einmalig{/BPO-Costs_Type_singleFixCost}
{BPO-Costs_Type_percentualSum}percentualSum = prozentual vom Wert der Split-Position{/BPO-Costs_Type_percentualSum}
{BPO-Costs_Type_multiplyWithQuantity}multiplyWithQuantity = multipliziert mit Menge der Split-Position{/BPO-Costs_Type_multiplyWithQuantity}<br>
Sum: {BPO-Costs_Sum}~BPO-Costs_Sum~{/BPO-Costs_Sum} {!BPO-Costs_Sum}keine zusätzlichen Kosten{/!BPO-Costs_Sum}<br>
CostsValid: {BPO-Costs_Valid}ja{/BPO-Costs_Valid}{!BPO-Costs_Valid}nein{/!BPO-Costs_Valid}
{/@BPO-Costs}
{/BPO-LevelOfUsage_XYZ}
{/@BPO-Data}
...
<input type="submit" value="speichern" name="~BT-BPO_Refresh~">
...
Referenz: BPO-Data
Referenz: BPO-Input
Referenz: BPO-Input_Type_Input
Referenz: BPO-Input_Type_Checkbox
Referenz: BPO-Input_input
Referenz: BPO-Input_value
Referenz: BPO-Input_error
Referenz: BPO-Costs
Referenz: BPO-Costs_ID
Referenz: BPO-Costs_Name
Referenz: BPO-Costs_Value
Referenz: BPO-Costs_Type_singleFixCost
Referenz: BPO-Costs_Type_percentualSum
Referenz: BPO-Costs_Type_multiplyWithQuantity
Referenz: BPO-Costs_Sum
Referenz: BPO-Costs_Valid
Referenz: BT-BPO_Refresh
Schritt 8: Anzeige der zusätzlichen Gesamtkosten
Für die Ausgabe der zusätzlichen Gesamtkosten fügen Sie das Tag BPO-AllCosts_Sum an die entsprechenden Stellen auf der Warenkorbseite (ws_basket.htm) oder der Bestellübersichtsseite (ws_place_order.htm) ein:
...
Aufpreis für freie Felder auf Split-Positionsebene (BPO):
{BPO-AllCosts_Sum}~BPO-AllCosts_Sum~ ~WS-CurrencySymbol~{/BPO-AllCosts_Sum}
{!BPO-AllCosts_Sum}keine Kosten{/!BPO-AllCosts_Sum}
...
Referenz: BPO-AllCostsSum
Schritt 9: Optionale Ausgabe der eingegebenen Werte
Für die Ausgabe der vom Kunden in die Eingabefelder eingegebenen Werte, fügen Sie das Tag BPO-Input_value z. B. auf der Bestellübersichtsseite (ws_place_order.htm) ein.
Je nach Integration muss der Code inner- oder außerhalb des BASKET-PR-Data-Bereichs stehen.
Beispiel:
...
{@BPO-Data}
{@BPO-Input}
Name des Eingabefeldes: ~BPO-Input_input~<br>
Wert des Feldes: ~BPO-Input_value~<br>
{/@BPO-Input}
{/@BPO-Data}
...
Referenz: BPO-Input_input
Referenz: BPO-Input_value
Schritt 10: Testmodus beenden
Nach erfolgreichem Test der Funktion ändern Sie den Parameter Test im Abschnitt <+BasketProductOption> auf no.
Haben Sie alle Schritte durchgeführt, ist die Funktion "Freie Felder auf Split-Positionsebene" vollständig integriert.