Sie haben die Möglichkeit, bei der Eingabe der Rechnungsadresse zwischen verschiedenen Adresstypen zu unterscheiden, z. B. zwischen privater und geschäftlicher Adresse. Diese Auswahl kann auf weitere Adresstypen erweitert werden. In diesem Beispiel werden nach Abfrage des Adresstyps die jeweils notwendigen und entsprechend bezeichneten Adresseingabefelder angezeigt.
Integration der Abfrage der Rechnungsadresse (privat oder geschäftlich)
Diese Funktionalität ist ein Beispiel für die "eingabeabhängige Adressdatensteuerung".
Schritt 1: Anlegen/Aktivieren der Eingabefelder
Legen Sie im Abschnitt <AddressFields-Txt> der Shopkonfiguration shop.config alle Adresseingabefelder fest, die für die Eingabe einer privaten und geschäftlichen Adresse erforderlich sind.
<AddressFields-Txt>
Suffix1 = Wählen Sie Ihren Adress-Typ
Company = Firma / Institution #wird nur für Geschäftsadresse benötigt
Salutation = Anrede
FirstName = Vorname
LastName = Nachname
Street1 = Straße, Nr.
Zip = PLZ
City = Ort
Country = Land
TaxID = Umsatzsteuer ID #wird nur für Geschäftsadresse benötigt
</AddressFields-Txt>
Referenz: Abschnitt AddressFields-Txt
Schritt 2: Definition der Auswahlmöglichkeiten
Im technischen Adressdatenfeld Suffix1 soll die Abfrage des Adresstyps stattfinden. Für dieses Feld müssen die Auswahlmöglichkeiten in der Shopkonfiguration shop.config definiert werden.
Fügen Sie den Abschnitt <A-Suffix1> unterhalb des Abschnittes <AddressFields-Txt> ein. Die Auswahlmöglichkeiten werden mit <+Entry>-Abschnitten definiert und sind beliebig erweiterbar.
<A-Suffix1>
<+Entry>
Name = Privatadresse
Value = 01
</+Entry>
<+Entry>
Name = Geschäftsadresse
Value = 02
</+Entry>
</A-Suffix1>
Wegweiser: Auswahllisten der Adressdaten
Referenz: Abschnitt A-Suffix..
Schritt 3: Definition des Standard-Rechnungsadresstyps
Legen Sie fest, welcher Adresstyp Standard sein soll. Dieser Adresstyp ist standardmäßig vorausgewählt und die dazugehörigen Adresseingabefelder werden angezeigt, wenn der Kunde zum ersten Mal seine Adresse eingeben möchte.
Fügen Sie hierzu den Abschnitt <AddressFields-Standards> in Ihre Shopkonfiguration shop.config ein. Die Definition des Standard-Adresstyps erfolgt durch den Parameter Suffix1 und den Wert des gewünschten Adresstyps, wie im oben gezeigten Abschnitt bei Value angegeben.
In unserem Beispiel soll die Privatadresse als Standard definiert werden.
<AddressFields-Standards>
Suffix1 = 01
</AddressFields-Standards>
Referenz: Abschnitt AddressFields-Standards
Schritt 4: Definition der Anzeige der Eingabefelder
Nach dem Anlegen der Adresseingabefelder in der Shopkonfiguration shop.config muss festgelegt werden, welche Adresseingabefelder bei welchem Adresstyp angezeigt werden sollen.
Für unser Beispiel ergibt sich die folgende Definition:
Feld |
Privatadresse |
Geschäftsadresse |
Firma |
- |
x |
Anrede |
x |
x |
Vorname |
x |
x |
Name |
x |
x |
Straße, Hausnummer |
x |
x |
Postleitzahl |
x |
x |
Ort |
x |
x |
Land |
x |
x |
Umsatzsteuer-ID |
- |
x |
Für die Adresseingabefelder, die bei beiden Adresstypen angezeigt werden, müssen keine speziellen Definitionen vorgenommen werden.
Für die Adresseingabefelder "Firma" und "Umsatzsteuer ID" muss folgende Regel erstellt werden:
Die Adresseingabefelder "Firma" und "Umsatzsteuer ID" sollen nur angezeigt werden, wenn als Adresstyp "Geschäftsadresse" gewählt wurde.
Diese Festlegung erfolgt im Abschnitt <AddressFields-InputVisibility> in der Shopkonfiguration shop.config.
<AddressFields-InputVisibility>
<+FieldVisibility> # Definition für das Eingabefeld "Firma"
AddressField = Company
AddressType = bill
Visible = yes
ResetIfHidden = yes
<+Condition>
Field = Suffix1
Type = value
Value = 02
</+Condition>
</+FieldVisibility>
<+FieldVisibility> # Definition für das Eingabefeld "Umsatzsteuer ID"
AddressField = TaxID
AddressType = bill
Visible = yes
ResetIfHidden = yes
<+Condition>
Field = Suffix1
Type = value
Value = 02
</+Condition>
</+FieldVisibility>
</AddressFields-InputVisibility>
Referenz: Abschnitt AddressFields-InputVisibility
Schritt 5: Definition der Pflichtfelder
Ob ein Adresseingabefeld ein Pflichtfeld ist, also zwingend vom Kunden ausgefüllt werden muss, wird im Abschnitt <InputCheck> in der Shopkonfiguration shop.config definiert.
In unserem Beispiel sind alle Eingabefelder Pflichtfelder. Für die Adresseingabefelder, die bei beiden Adresstypen verwendet werden, erstellen Sie die Pflichtfeld-Definition wie folgt:
<InputCheck>
...
<+InputCheck>
AddressField = Salutation,FirstName,LastName,Street1,Zip,City,Country
AddressType = bill
Type = minlen
Len = 1
ErrorMessageID = emptyerror
</+InputCheck>
...
</InputCheck>
Für die beiden Eingabefelder "Firma" und "Umsatzsteuer ID" soll die Pflichtfeld-Definition nur erfolgen, wenn der entsprechende Adresstyp ausgewählt wurde.
"Firma" und "Umsatzsteuer ID" sollen nur Pflichtfeld sein, wenn der Adresstyp "Geschäftsadresse" gewählt wurde.
<InputCheck>
<+InputCheck> # Definition für das Adresseingabefeld "Firma"
AddressField = Company
AddressType = bill
Type = minlen
Len = 1
ErrorMessageID = emptyerror
<+Condition>
Field = Suffix1
Type = value
Value = 02
</+Condition>
</+InputCheck>
<+InputCheck> # Definition für das Adresseingabefeld "Umsatzsteuer ID"
AddressField = taxID
AddressType = bill
Type = minlen
Len = 1
ErrorMessageID = emptyerror
<+Condition>
Field = Suffix1
Type = value
Value = 02
</+Condition>
</+InputCheck>
</InputCheck>
Referenz: Abschnitt InputCheck
Referenz: Prüfungen von Adressdaten festlegen
Schritt 6: Festlegen der Felder, die eine Aktion auslösen
Bei Auswahl eines Adresstyps sollen die jeweiligen, oben festgelegten Eingabefelder angezeigt werden. Hierfür wird der Abschnitt <AddressFields-Actions> benötigt.
In diesem Abschnitt wird festgelegt, welche Felder eine Aktion auslösen sollen: in diesem Fall also das Ein- und Ausblenden von Adresseingabefeldern nach Auswahl des Adresstyps.
<AddressFields-Actions>
<+FieldAction>
AddressField = Suffix1
AddressType = bill
</+FieldAction>
</AddressFields-Actions>
Referenz: Abschnitt AddressFields-Actions
Schritt 7: Integration der Eingabefelder im Template
Die Eingabe der Rechnungsadresse kann im Bestellablauf auf der Rechnungs- und Lieferadresseingabeseite (ws_address_combined.htm) und bei der Verwaltung der Rechnungsadresse im Kundenkonto (ws _address_manage.htm) erfolgen.
Fügen Sie hierzu die folgenden Adresseingabefelder innerhalb der <form> auf beiden Templates ein:
... <h1>Ihre Rechnungsadresse</h1> <!-- Auswahl der Adressart als RadioButtons --> {A-Suffix1_visible} <label for="~A-Suffix1_input~">~A-Suffix1_text~ {A-Suffix1_required}*{/A-Suffix1_required}</label> {@A-Suffix1_data} <input type="radio" name="~A-Suffix1_input~" value="~A-Suffix1_code~" {A-Suffix1_action}onChange="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Suffix1_action} {A-Suffix1_selected}checked{/A-Suffix1_selected}> <label>~A-Suffix1_value~</label> {/@A-Suffix1_data} {A-Suffix1_errormessage}<p class="errormessage">~A-Suffix1_errormessage~</p>{/A-Suffix1_errormessage} {/A-Suffix1_visible} <!-- Adresseingabfeld Firma --> {A-Company_visible} <label for="~A-Company_input~">~A-Company_text~ {A-Company_required}*{/A-Company_required} </label> <input type="text" name="~A-Company_input~" maxlength="~A-Company_max~" value="~A-Company~" class="input~A-Company_error~" {A-Company_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Company_action}><br> {A-Company_errormessage}~A-Company_errormessage~{/A-Company_errormessage} {/A-Company_visible} <!-- Auswahl der Anrede --> {A-Salutation_visible} <label for="~A-Salutation_input~">~A-Salutation_text~ {A-Salutation_required}*{/A-Salutation_required}</label> <select name="~A-Salutation_input~" id="~A-Salutation_input~" class="select_salutation~A-Salutation_error~" {A-Salutation_action}onChange="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Salutation_action}> {@A-Salutation_data} <option value="~A-Salutation_code~" ~A-Salutation_selected~>~A-Salutation_value~</option> {/@A-Salutation_data} </select><br> {A-Salutation_errormessage}~A-Salutation_errormessage~{/A-Salutation_errormessage} {/A-Salutation_visible} <!-- Adresseingabfeld Name --> {A-LastName_visible} <label for="~A-LastName_input~">~A-LastName_text~ {A-LastName_required}*{/A-LastName_required} </label> <input type="text" name="~A-LastName_input~" maxlength="~A-LastName_max~" value="~A-LastName~" class="input~A-LastName_error~" {A-LastName_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-LastName_action}><br> {A-LastName_errormessage}~A-LastName_errormessage~{/A-LastName_errormessage} {/A-LastName_visible} <!-- Auswahl des Landes --> {A-Country_visible} <label for="~A-Country_input~">~A-Country_text~ {A-Country_required}*{/A-Country_required}</label> <select name="~A-Country_input~" id="~A-Country_input~" class="select_Country~A-Country_error~" {A-Country_action}onChange="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Country_action}> {@A-Country_data} <option value="~A-Country_code~" ~A-Country_selected~>~A-Country_value~</option> {/@A-Country_data} </select><br> {A-Country_errormessage}~A-Country_errormessage~{/A-Country_errormessage} {/A-Country_visible} <!-- Adresseingabfeld der Straße/Hsnr. --> {A-Street1_visible} <label for="~A-Street1_input~">~A-Street1_text~ {A-Street1_required}*{/A-Street1_required} </label> <input type="text" name="~A-Street1_input~" maxlength="~A-Street1_max~" value="~A-Street1~" class="input~A-Street1_error~" {A-Street1_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Street1_action}><br> {A-Street1_errormessage}~A-Street1_errormessage~{/A-Street1_errormessage} {/A-Street1_visible} <!-- Adresseingabfeld der Postleitzahl --> {A-Zip_visible} <label for="~A-Zip_input~">~A-Zip_text~ {A-Zip_required}*{/A-Zip_required} </label> <input type="text" name="~A-Zip_input~" maxlength="~A-Zip_max~" value="~A-Zip~" class="input~A-Zip_error~" {A-Zip_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-Zip_action}> {A-Zip_errormessage}~A-Zip_errormessage~{/A-Zip_errormessage} {/A-Zip_visible} <!-- Adresseingabfeld des Ortes --> {A-City_visible} <label for="~A-City_input~">~A-City_text~ {A-City_required}*{/A-City_required} </label> <input type="text" name="~A-City_input~" maxlength="~A-City_max~" value="~A-City~" class="input~A-City_error~" {A-City_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-City_action}> {A-City_errormessage}~A-City_errormessage~{/A-City_errormessage} {/A-City_visible} <!-- Adresseingabfeld UmsatzsteuerID --> {A-TaxID_visible} <label for="~A-TaxID_input~">~A-TaxID_text~ {A-TaxID_required}*{/A-TaxID_required} </label> <input type="text" name="~A-TaxID_input~" maxlength="~A-TaxID_max~" value="~A-TaxID~" class="input~A-TaxID_error~" {A-TaxID_action}onBlur="ws_AJAXRefreshAddressInput('addressform','~BT-Addr_refresh~','~WS-Charset~')"{/A-TaxID_action}><br> {A-TaxID_errormessage}~A-TaxID_errormessage~{/A-TaxID_errormessage} {/A-TaxID_visible} ...
Referenz: A-"technischer Name"_text
Referenz: A-"technischer Name"_required
Referenz: A-"technischer Name"_input
Referenz: A-"technischer Name"_data
Referenz: A-"technischer Name"_code
Referenz: A-"technischer Name"_action
Referenz: A-"technischer Name"_selected
Referenz: A-"technischer Name"_value
Referenz: A-"technischer Name"_max
Referenz: A-"technischer Name"_visible
Referenz: A-"technischer Name"_error
Referenz: A-"technischer Name"_errormessage
Schritt 8: Nachladen der Seite / Aktion auf dem Template ausführen
Das Ein-/Ausblenden der Adresseingabefelder erfolgt über AJAX. Hierzu muss der Bereich definiert werden, der nachgeladen werden soll, um die Ansicht der ein-/ausgeblendeten Adresseingabefelder anzuzeigen.
Beispiel:
Unser div-Container mit der ID content soll nachgeladen werden. Aus diesem Grund setzen wir die AJAX-Klammerung mit dem Namen unserer ID: <WS-Ajax-content>.
<div id="content">
{ST-Ajax}<WS-Ajax-content>{/ST-Ajax}
...
{ST-Ajax}</WS-Ajax-content>{/ST-Ajax}
</div>
Referenz: ST-Ajax
Referenz: WS-Ajax-"ID"
Wegweiser: AJAX-Funktionen
Schritt 9: Zuweisen einer ID für die <form>
Vergeben Sie der jeweiligen <form> auf Ihren Templates der Rechnungs- und Lieferadresseingabeseite (ws_address_combined.htm) und der Rechnungsadresse im Kundenkonto (ws_ address_manage.htm) eine ID.
<form action="" method="POST" autocomplete="off" id="addressform">
...
</form>
Referenz: FORM-Addr
Referenz: FORM-AddrManage
Schritt 10: Integrieren der aktuellen JavaScript-Bibliothek
Überprüfen Sie, ob die folgende Version der WEBSALE JavaScript-Bibliothek bereits im <head>-Bereich Ihrer Seite eingebunden ist. Sollte dies nicht der Fall sein, fügen Sie diese bitte hinzu:
<script type="text/javascript" src="/$WS/ws_sysdata/js/ws-system-1.8.3.js"></script>
Materialien: WEBSALE JavaScript-Bibliothek
Schritt 11: Integrieren der JavaScript-Funktionen
Fügen Sie die folgenden JavaScript-Funktionen in Ihre Designkomponente (ws-design) ein. Hier können Sie dann wie gewohnt Ladecontainer, Fehlerhinweis-Layer etc. definieren.
////////////////////////////////////////////////////////////////////////////////////////// // Modul: "Eingabeabhängige Adressdatensteuerung" // ////////////////////////////////////////////////////////////////////////////////////////// //Diese Funktion wird aufgerufen bevor die AJAX-Anfrage zum Nachladen der Eingabefelder abgesetzt wird. //Mit dieser Funktion ist zum Beispiel eine Ladeanzeige realisierbar function ws_AJAXRefreshAddressInputStart() { } //Diese Funktion wird aufgerufen wenn das Nachladen der Eingabefelder erfolgreich war function ws_AJAXRefreshAddressInputResponseSuccess() { } //Diese Funktion wird aufgerufen wenn das Nachladen der Eingabefehler nicht erfolgreich war function ws_AJAXRefreshAddressInputResponseError() { } //Diese Funktion wird aufgerufen wenn die AJAX-Kommunikation fehlschlug //Mit dieser Funktion laesst sich ein allgemeiner Kommunikationsfehler (z.B. wenn die Internetverbindung unterbrochen wurde) anzeigen function ws_AJAXRefreshAddressInputError() { }
Schritt 12: WEBSALE Postleitzahl-Assistent
Nutzen Sie den WEBSALE Postleitzahl-Assistenten, müssen Sie sicherstellen, dass das verantwortliche JavaScript auch nach dem Nachladen per Ajax funktioniert. Dazu müssen Sie realisieren, dass das JavaScript nach einem Ajax-Reload wieder geladen werden muss.
Wir empfehlen, den $(document).ready()-Funktionsaufruf durch eine eigene Funktion, z. B. function ifajaxreload_zip_help() zu ersetzen:
<script language="JavaScript" type="text/javascript"> function ifajaxreload_zip_help(){ // PLZ-Assistent für Rechnungsadresse var paramsBill = { language_list: ["DEU","AUT"], call_url: "~WS-AjaxZipHelpURL~", zip_field: "input[name=ws_input_zip]", city_field: "input[name=ws_input_city]", lang_field: "select[name=ws_input_country]", close: true, headline: "PLZ Hilfe", description: "Hilfe zur Auswahl Ihrer Postleitzahl und Ihres Wohnortes", }; $.ws_zip_help(paramsBill); // PLZ Assistent für Lieferadresse var paramsDelivery = {}; $.extend(paramsDelivery, paramsBill); paramsDelivery.zip_field = "input[name=ws_input_delivery_zip]"; paramsDelivery.city_field = "input[name=ws_input_delivery_city]"; paramsDelivery.lang_field = "select[name=ws_input_delivery_country]"; $.ws_zip_help(paramsDelivery); }; </script>
Fügen Sie dann innerhalb Ihres Content-Bereiches zwischen den Ajax-Klammerungen <WS-Ajax-Ihre ID> und </WS-Ajax-Ihre ID> das JavaScript mit Ihrem Funktionsaufruf ein. Dadurch realisieren Sie, dass das JavaScript wieder erneut geladen wird.
<div id="content"> {ST-Ajax}<WS-Ajax-content>{/ST-Ajax} ... <script language="JavaScript" type="text/javascript"> $(document).ready(function(){ ifajaxreload_zip_help() }) </script> ... {ST-Ajax}</WS-Ajax-content>{/ST-Ajax} </div>
Wegweiser: PLZ-Assistent