Freie Eingabefelder im Warenkorb auf Positionsebene

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.