> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Mehrere Adressen: Tags je Template

> Welche Tags auf welchem Template gebraucht werden, wenn ein Käufer mehrere Rechnungs- und Lieferadressen verwalten kann: Adresseingabe, Lieferadressauswahl, Adressverwaltung und die Einstiege im Kundenkonto.

Sobald ein Käufer sich anmelden kann, hat er nicht mehr eine Adresse, sondern einen Vorrat davon: eine Rechnungsadresse und beliebig viele gespeicherte Lieferadressen. Das Shopsystem nennt diesen Zustand "multiple Adressen". Er verteilt sich über fünf Templates, und auf jedem wird etwas anderes gebraucht.

Diese Seite ist der Wegweiser durch diese fünf Templates. Sie sagt, welches Template welche Aufgabe hat, welche Tags dort stehen müssen und welche Zustände es zu bedienen gibt. Beschrieben sind die einzelnen Tags jeweils auf der Seite ihres Präfixes, die hier verlinkt ist.

Wegweiser: [Rechnungs- und multiple Lieferadressen abfragen](https://dokumentation.websale.de/v8s/adressdaten/rechnungs-und-multiple-lieferadressen-abfragen.md) · Referenz: [Abschnitt Templates](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#templates)

## Die fünf Templates

Alle fünf tragen Sie in der Shopkonfiguration `shop.config` im Abschnitt `<Templates>` ein.

| Parameter | Übliche Datei | Aufgabe |
| - | - | - |
| `CombinedAddress` | `ws_address_combined.htm` | Rechnungsadresse eingeben und zugleich das Lieferziel wählen |
| `AddressManage` | `ws_address_manage.htm` | die Rechnungsadresse im Kundenkonto ändern |
| `DelivAddress` | `ws_deliv_address.htm` | die gewählte Lieferadresse im Bestellablauf anzeigen |
| `DelivAddressManage` | `ws_deliv_address_manage.htm` | die Lieferadressen übersehen, anlegen, ändern und löschen |
| `Useraccount` | `ws_useraccount.htm` | die Einstiege in beide Verwaltungsseiten |

Die Dateinamen sind Konvention, nicht Vorschrift. Maßgeblich ist der Parameter im Abschnitt `<Templates>`. Mehrere Tags dieser Seite prüfen intern, auf welchem Template sie stehen, und gelten als ungültiges Tag, wenn sie woanders auftauchen.

## Rechnungsadresse und Lieferziel auf einer Seite

Das Template `CombinedAddress` erledigt beides in einem Formular: die Eingabe der Rechnungsadresse und die Entscheidung, wohin geliefert werden soll.

| Tag | Liefert | Beschrieben bei |
| - | - | - |
| `FORM-Addr` | die Zieladresse des Adressformulars | [FORM- (Formulare)](https://dokumentation.websale.de/v8s/referenz/tags/form-formulare.md) |
| `WS-AddrFields` | alle Eingabefelder der Rechnungsadresse als Block | [WS- (Allgemeine Tags)](https://dokumentation.websale.de/v8s/referenz/tags/ws/bestellprozess-adressen-und-pruefungen.md) |
| `WS-DelivAddr_list` | die Auswahlliste der Lieferadressen als einzelne Selectbox | WS- (Allgemeine Tags) |
| `ST-MultipleData` | greift, wenn der Käufer mehrere Datensätze verwalten darf | [ST- (Seitenzustände)](https://dokumentation.websale.de/v8s/referenz/tags/st/seitenzustand-und-navigation.md) |
| `ST-SingleData` | greift im Gegenfall | ST- (Seitenzustände) |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<form action="~FORM-Addr~" name="addressform" method="post">
   ~WS-AddrFields~

   {ST-MultipleData}
      <label>Lieferadresse</label>
      ~WS-DelivAddr_list~
   {/ST-MultipleData}
</form>
```

> [!WARNING]
>
> `WS-DelivAddr_list` arbeitet ausschließlich auf dem Template `CombinedAddress`. Auf jedem anderen Template gilt es als ungültiges Tag.

### Was ST-MultipleData wirklich prüft

Die bisherige Beschreibung setzt `ST-MultipleData` mit "angemeldet" gleich und `ST-SingleData` mit "nicht angemeldet". Das stimmt nur auf zwei der Templates.

| Template | `ST-MultipleData` greift, wenn |
| - | - |
| `CombinedAddress` | der Käufer angemeldet ist |
| Verwaltung mehrerer Lieferadressen | der Käufer angemeldet ist |
| `PlaceOrder` | der Käufer angemeldet ist **und** als Zahlungsart Kreditkarte gewählt hat, oder Bankeinzug gewählt hat und das Speichern von Bankdaten im Shop erlaubt ist |
| alle übrigen | nie |

Der Grund für die Sonderregel auf der Bestellübersicht ist, dass dort nicht Adressen, sondern Zahlungsdaten mehrfach vorliegen können. Dieselben beiden Tags bedienen beide Fälle. Setzen Sie sie deshalb immer mit Blick auf das Template, auf dem sie stehen.

> [!WARNING]
>
> `{!ST-SingleData}` greift derzeit in genau denselben Fällen wie `{ST-SingleData}`. Die negative Klammerung ist damit wirkungslos. Verwenden Sie stattdessen `{ST-MultipleData}`, das den Gegenfall korrekt abdeckt.

### Das Lieferziel über Radiobuttons

Statt einer einzelnen Selectbox können Sie das Lieferziel über eine Gruppe von Radiobuttons anbieten und die Liste der gespeicherten Adressen nur dann einblenden, wenn sie gebraucht wird. Dafür gibt es eine eigene Tag-Familie mit immer demselben Bauplan.

| Baustein | Tag |
| - | - |
| Feldname der Gruppe | `WS-DelivAddr_radioname` |
| Auswahlliste innerhalb der Gruppe | `WS-DelivAddr_radiolist` |
| Wert je Option | `WS-DelivAddr_radiovalue_<Ziel>` |
| Markierung der gewählten Option | `WS-DelivAddr_radioselected_<Ziel>` |

Für `<Ziel>` gibt es fünf Werte.

| Ziel | Bedeutung |
| - | - |
| `nodeliv` | keine abweichende Lieferadresse |
| `usedeliv` | eine gespeicherte Lieferadresse verwenden |
| `inputdeliv` | eine neue Lieferadresse eingeben |
| `inputwishlist` | die hinterlegte Wunschlistenadresse verwenden |
| `inputmultidelivery` | die Bestellung auf mehrere Lieferadressen verteilen |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<label>
   <input type="radio" name="~WS-DelivAddr_radioname~"
          value="~WS-DelivAddr_radiovalue_nodeliv~"
          ~WS-DelivAddr_radioselected_nodeliv~>
   An die Rechnungsadresse
</label>

<label>
   <input type="radio" name="~WS-DelivAddr_radioname~"
          value="~WS-DelivAddr_radiovalue_usedeliv~"
          ~WS-DelivAddr_radioselected_usedeliv~>
   An eine gespeicherte Lieferadresse
</label>

{WS-DelivAddr_radioselected_usedeliv}
   ~WS-DelivAddr_radiolist~
{/WS-DelivAddr_radioselected_usedeliv}
```

Sie sind die fünfte Option der Gruppe und der Einstieg in die Verteilung auf mehrere Lieferadressen.

Die `radioselected`-Tags geben als Einzel-Tag ` checked` mit einem führenden Leerzeichen aus. Sie können sie deshalb direkt hinter das vorangehende Attribut setzen. Als Klammerung greifen sie bei der jeweils gewählten Option, so wie oben bei der Auswahlliste.

### Die neue Adresse speichern

Gibt der Käufer eine neue Lieferadresse ein, kann er sie für das nächste Mal speichern lassen.

| Tag | Liefert |
| - | - |
| `WS-DelivAddr_checkbox_saveaddress` | den Feldnamen der Checkbox |
| `WS-DelivAddr_checkboxchecked_saveaddress` | die Markierung der Checkbox |
| `WS-DelivAddr_checkbox_setAsDefaultAddress` | den Feldnamen der Checkbox "als Standardadresse verwenden" |
| `WS-DelivAddr_checkboxchecked_setAsDefaultAddress` | deren Markierung |

Damit legt der Käufer die neue Adresse zugleich als Standard-Lieferadresse fest, statt sie nur zu speichern.

Beide Feldnamen sind im Shopsystem fest vergeben. Nehmen Sie sie immer aus dem Tag und schreiben Sie sie nicht von Hand, sonst erkennt der Shop die Eingabe beim Absenden nicht.

### Zum Ändern einer gewählten Adresse

`BT-DelivAddr_select_change` liefert den Feldnamen der Schaltfläche, mit der die in der Auswahlliste gewählte Lieferadresse zum Bearbeiten geöffnet wird. Beschrieben ist das Tag bei [BT- (Schaltflächen)](https://dokumentation.websale.de/v8s/referenz/tags/bt/adressen.md).

## Die Rechnungsadresse im Kundenkonto ändern

Auf dem Template `AddressManage` gibt es nur einen Zustand: das Formular.

| Tag | Liefert | Beschrieben bei |
| - | - | - |
| `A-Edit` | klammert den gesamten Eingabebereich | A- (Rechnungsadresse) |
| `FORM-AddrManage` | die Zieladresse des Formulars | FORM- (Formulare) |
| `WS-AddrFields` | alle Eingabefelder als Block | WS- (Allgemeine Tags) |
| `BT-Addr_save` | den Feldnamen der Schaltfläche zum Speichern | BT- (Schaltflächen) |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{A-Edit}
   <form action="~FORM-AddrManage~" method="POST">
      ~WS-AddrFields~
      <input type="submit" name="~BT-Addr_save~" value="speichern">
   </form>
{/A-Edit}
```

> [!WARNING]
>
> Ohne die Klammerung mit `A-Edit` arbeitet der Eingabebereich nicht. Sie ist keine Formsache, sondern schaltet den Bearbeitungszustand erst frei.

## Die Lieferadresse im Bestellablauf anzeigen

Das Template `DelivAddress` zeigt die Adresse, an die geliefert wird.

| Tag | Liefert | Beschrieben bei |
| - | - | - |
| `WS-DelivAddrFields` | die Eingabefelder der Lieferadresse als Block | WS- (Allgemeine Tags) |
| `WS-DelivAddr` | den Block der Lieferadresse | WS- (Allgemeine Tags) |
| `MSG-DelivAddr_Notify` | Hinweise zur Eingabe und Verwaltung | [MSG- (Meldungen)](https://dokumentation.websale.de/v8s/referenz/tags/msg-meldungen.md) |

> [!WARNING]
>
> Die Klammerung `{WS-DelivAddr}` greift nur, wenn der Käufer im Bestellablauf tatsächlich eine Lieferadresse gewählt hat. Der Einzel-Tag `~WS-DelivAddr~` wird dagegen immer ausgegeben. Klammern Sie den Block deshalb, sonst steht bei einer Lieferung an die Rechnungsadresse eine leere Überschrift auf der Seite.
>
> Dieses Tag gibt es im Shopsystem nicht, weder hier noch auf der Verwaltungsseite. Für die Liste der fehlerhaften Eingaben verwenden Sie die Einzelprüfungen der Familie `MSG-DelivAddr_InputError_…`, für alles Übrige `MSG-DelivAddr_Notify`. Die einzelnen Felder melden ihre Fehler ohnehin über ihre eigenen `_error`-Suffixe.

## Die Lieferadressen verwalten

Das Template `DelivAddressManage` ist die einzige Seite mit mehreren Zuständen. Welcher gilt, entscheidet das Shopsystem, und drei Klammerungen trennen sie im Template.

| Zustand | Klammerung | Inhalt |
| - | - | - |
| Übersicht | `D-Overview` | die Liste der gespeicherten Lieferadressen |
| Bearbeiten | `D-Edit` | das Formular für eine einzelne Adresse |
| Löschen bestätigen | `D-ConfirmDelete` | die Rückfrage vor dem Löschen |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{D-Overview}
   {D-Data}
      {@D-Data}
         <p>
            ~D-Position~. ~D-FirstName~ ~D-LastName~
            <a href="~D-EditLink~">ändern</a>
            <a href="~D-DeleteConfirmLink~">löschen</a>
         </p>
      {/@D-Data}
   {/D-Data}

   {D-NewDelivAddressLink}
      <a href="~D-NewDelivAddressLink~">neue Lieferadresse anlegen</a>
   {/D-NewDelivAddressLink}
{/D-Overview}

{D-Edit}
   <form action="~FORM-DelivAddrManage~" method="POST">
      ~WS-DelivAddrFields~
      <input type="submit" name="~BT-DelivAddr_save~" value="speichern">
   </form>
{/D-Edit}

{D-ConfirmDelete}
   <p>Soll diese Lieferadresse wirklich gelöscht werden?</p>
   <a href="~D-DeleteNoConfirmLink~">ja, löschen</a>
   <a href="~D-OverviewLink~">abbrechen</a>
{/D-ConfirmDelete}
```

### Die Tags dieser Seite

| Tag | Liefert | Beschrieben bei |
| - | - | - |
| `D-Data` | Anzahl, Vorhandensein und Schleife über die Lieferadressen | D- (Lieferadresse) |
| `D-Position` | die laufende Nummer innerhalb der Schleife | D- (Lieferadresse) |
| `D-OverviewLink` | den Link zurück auf die Übersicht | D- (Lieferadresse) |
| `D-EditLink` | den Link zum Bearbeiten einer Adresse | D- (Lieferadresse) |
| `D-NewDelivAddressLink` | den Link zum Anlegen einer neuen Adresse | D- (Lieferadresse) |
| `D-DeleteConfirmLink` | den Link auf die Rückfrage vor dem Löschen | D- (Lieferadresse) |
| `D-DeleteNoConfirmLink` | den Link, der sofort löscht | D- (Lieferadresse) |
| `D-ToOrderLink` | den Link zurück in den Bestellablauf | D- (Lieferadresse) |
| `FORM-DelivAddrManage` | die Zieladresse des Formulars | FORM- (Formulare) |
| `WS-DelivAddrFields` | die Eingabefelder als Block | WS- (Allgemeine Tags) |
| `BT-DelivAddr_save` | den Feldnamen der Schaltfläche zum Speichern | BT- (Schaltflächen) |
| `MSG-DelivAddr_Notify` | Hinweise zur Eingabe und Verwaltung | MSG- (Meldungen) |
| `MSG-DelivAddr_saved` | greift, nachdem eine Adresse gespeichert wurde | MSG- (Meldungen) |
| `MSG-DelivAddr_deleted` | greift, nachdem eine Adresse gelöscht wurde | MSG- (Meldungen) |

`MSG-DelivAddr_saved` und `MSG-DelivAddr_deleted` fehlen in der bisherigen Beschreibung dieser Seite. Mit ihnen melden Sie den Erfolg einer Aktion zurück, statt den Käufer kommentarlos auf die Übersicht zu schicken.

> [!WARNING]
>
> Setzen Sie `D-DeleteNoConfirmLink` nicht direkt in die Übersicht. Der Link löscht ohne Rückfrage. Der Weg über `D-DeleteConfirmLink` in den Bereich `D-ConfirmDelete` ist der einzige, bei dem der Käufer die Löschung noch abbrechen kann.

### Aus dem Bestellablauf oder aus dem Kundenkonto

Dieselbe Seite wird von zwei Stellen aus aufgerufen, und sie muss danach an verschiedene Orte zurückführen. `D-Mode_Order` und `D-Mode_Manage` unterscheiden das.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{D-Mode_Order}
   <a href="~D-ToOrderLink~">zurück zur Bestellung</a>
{/D-Mode_Order}

{D-Mode_Manage}
   <a href="~WS-UserAccountLink~">zurück zum Kundenkonto</a>
{/D-Mode_Manage}
```

Die beiden Klammerungen prüfen nicht, woher der Käufer kam, sondern wohin es nach der Aktion weitergeht. `D-Mode_Order` greift, wenn die hinterlegte Folgeseite die Adresseingabe oder die Bestellübersicht ist, `D-Mode_Manage` in jedem anderen Fall. In der Praxis läuft das auf dieselbe Unterscheidung hinaus, die beiden Zweige schließen einander immer aus.

## Die Einstiege im Kundenkonto

| Tag | Liefert | Beschrieben bei |
| - | - | - |
| `WS-AddrManageLink` | den Link auf die Verwaltung der Rechnungsadresse | WS- (Allgemeine Tags) |
| `WS-DelivAddrManageLink` | den Link auf die Verwaltung der Lieferadressen | WS- (Allgemeine Tags) |

## Einzelne Felder statt Blockpositionierung

`WS-AddrFields` und `WS-DelivAddrFields` geben den kompletten Satz Eingabefelder aus. Wenn Sie das Layout selbst bestimmen wollen, positionieren Sie stattdessen jedes Feld einzeln. Dafür gibt es zu jedem Adressfeld ein festes Raster von Suffixen, bei der Rechnungsadresse unter `A-`, bei der Lieferadresse unter `D-`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~D-FirstName_text~:
<input type="text"
       name="~D-FirstName_input~"
       size="30"
       maxlength="~D-FirstName_max~"
       value="~D-FirstName~"
       class="deliv_addr_text_input~D-FirstName_error~">

{D-FirstName_error}
   <span class="fehler">~D-FirstName_errormessage~</span>
{/D-FirstName_error}
```

Das Raster und die Liste der verfügbaren Felder stehen bei den beiden Präfixen.

* Referenz: [A- (Rechnungsadresse)](https://dokumentation.websale.de/v8s/referenz/tags/a-rechnungsadresse.md)
* Referenz: [D- (Lieferadresse)](https://dokumentation.websale.de/v8s/referenz/tags/d-lieferadresse.md)

> [!WARNING]
>
> Das Feld `UserDescr` der Lieferadresse gibt die Blockpositionierung **nicht** mit aus. Wenn der Käufer seinen Adressen eigene Bezeichnungen geben soll, müssen Sie dieses eine Feld immer von Hand positionieren, auch wenn Sie sonst mit `WS-DelivAddrFields` arbeiten.

Die Auswahllisten für Anrede, Titel, Land und Geburtsdatum füllt das Shopsystem selbst. Bei fehlerhaften Eingaben hängt es an die Klassennamen automatisch das Suffix `_error` an, und die Klammerungen für fehlerhafte Eingaben greifen auch dort.

> [!WARNING]
>
> Die benutzerdefinierten Auswahllisten `UserDefList-1` bis `UserDefList-3` sind veraltet und werden nicht mehr unterstützt. Verwenden Sie sie in neuen Templates nicht mehr.

## Verwandte Themen

* Wegweiser: [Rechnungs- und multiple Lieferadressen abfragen](https://dokumentation.websale.de/v8s/adressdaten/rechnungs-und-multiple-lieferadressen-abfragen.md)
* Wegweiser: [Auswahllisten der Adressdaten](https://dokumentation.websale.de/v8s/adressdaten/auswahllisten-der-adressdaten.md)
* Wegweiser: [Prüfungen der Adressdaten festlegen](https://dokumentation.websale.de/v8s/adressdaten/pruefungen-von-adressdaten-festlegen.md)
* Referenz: [MDM- (Mehrere Lieferadressen)](https://dokumentation.websale.de/v8s/referenz/tags/mdm-mehrere-lieferadressen.md)
* Referenz: [Abschnitt DeliveryAddressSelection](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/adressen-und-eingabepruefung.md#deliveryaddressselection)


## Related topics

- [Bestellprozess, Adressen und Prüfungen](https://dokumentation.websale.de/v8s/referenz/tags/ws/bestellprozess-adressen-und-pruefungen.md)
- [MDM- (Mehrere Lieferadressen)](https://dokumentation.websale.de/v8s/referenz/tags/mdm-mehrere-lieferadressen.md)
- [URL- (Internetadresse)](https://dokumentation.websale.de/v8s/referenz/tags/url-internetadresse.md)
- [D- (Lieferadresse)](https://dokumentation.websale.de/v8s/referenz/tags/d-lieferadresse.md)
- [Styles für Kunde und Adressen](https://dokumentation.websale.de/v8s/referenz/styles/kunde-und-adressen.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.