> ## 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.

# SAVEDBASKET- (Speicherbare Warenkörbe)

> Warenkörbe dauerhaft im Kundenkonto ablegen: den aktuellen Warenkorb speichern oder anhängen, die abgelegten Warenkörbe auflisten, bearbeiten, ersetzen und löschen.

Ein angemeldeter Käufer kann seinen Warenkorb unter einem Namen ablegen und später wieder hervorholen. Im Großhandel wird daraus eine wiederkehrende Bestellvorlage, im Privatkundengeschäft ein Merkzettel mit Mengen.

Die Funktion verteilt sich auf zwei Orte. Auf dem Warenkorbtemplate legt der Käufer den aktuellen Warenkorb ab, hängt ihn an einen vorhandenen an oder ersetzt einen vorhandenen damit. Auf dem eigenen Template `SavedBasketsManage` verwaltet er seine abgelegten Warenkörbe. Die `SAVEDBASKET-`Tags decken beide Orte ab.

Wegweiser: [Speicherbare Warenkörbe](https://dokumentation.websale.de/v8s/referenz/styles/warenkorb-und-bestellung.md#speicherbare-warenkorbe)

Gespeicherte Warenkörbe hängen am Kundenkonto. Alle Tags dieser Seite setzen deshalb einen angemeldeten Käufer voraus.

## Der Einstieg

| Tag | Aufgabe |
| - | - |
| `WS-SavedBasketsManageLink` | Link auf die Verwaltung der gespeicherten Warenkörbe |
| `SAVEDBASKET-NewSavedBasketsLeft` | Klammerung: lässt sich noch ein weiterer Warenkorb anlegen |
| `SAVEDBASKET-Baskets` | Zahl der gespeicherten Warenkörbe, Klammerung und Schleife |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{SAVEDBASKET-Baskets}
   <a href="~WS-SavedBasketsManageLink~">
      Gespeicherte Warenkörbe (~SAVEDBASKET-Baskets~)
   </a>
{/SAVEDBASKET-Baskets}
```

`WS-SavedBasketsManageLink` gehört zum Präfix `WS-` und greift als Klammerung, wenn der Käufer angemeldet ist.

> [!WARNING]
>
> Jede Auswertung von `SAVEDBASKET-Baskets` liest die Liste aus der Datenbank. Öffnen Sie die Klammerung einmal je Seite und arbeiten Sie innerhalb davon weiter, statt das Tag an mehreren Stellen zu wiederholen.

Die Zahl der gespeicherten Warenkörbe je Kunde und die Zahl der Positionen je Warenkorb sind im Shopsystem fest begrenzt. Ist eine der Grenzen erreicht, blenden die zuständigen Klammerungen die jeweilige Möglichkeit von selbst aus. Sie brauchen dafür keine eigene Prüfung.

## Den aktuellen Warenkorb ablegen

Auf dem Warenkorbtemplate stehen drei Wege offen: als neuen Warenkorb speichern, an einen vorhandenen anhängen oder einen vorhandenen ersetzen. Alle drei laufen über dieselbe Form.

| Tag | Aufgabe |
| - | - |
| `FORM-SaveBasket` | die Form für alle drei Wege |
| `SAVEDBASKET-Description_input` | HTML-Name des Felds für den Namen |
| `SAVEDBASKET-AddToSavedBasketSelection` | Auswahlliste der Warenkörbe, die noch etwas aufnehmen können |
| `SAVEDBASKET-ReplaceWithBasketSelection` | Auswahlliste der Warenkörbe, die ersetzt werden können |
| `BT-SavedBasket_new` | Knopf: als neuen Warenkorb speichern |
| `BT-SavedBasket_add` | Knopf: an den ausgewählten anhängen |
| `BT-SavedBasket_replace_confirm` | Knopf: ausgewählten ersetzen, mit Rückfrage |
| `BT-SavedBasket_replace_noconfirm` | Knopf: ausgewählten ersetzen, ohne Rückfrage |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{FORM-SaveBasket}
   <form method="post" action="~FORM-SaveBasket~">
      <input type="text" name="~SAVEDBASKET-Description_input~" value="">
      <input type="submit" name="~BT-SavedBasket_new~" value="Als neuen Warenkorb speichern">

      {SAVEDBASKET-AddToSavedBasketSelection}
         ~SAVEDBASKET-AddToSavedBasketSelection~
         <input type="submit" name="~BT-SavedBasket_add~" value="Hinzufügen">
      {/SAVEDBASKET-AddToSavedBasketSelection}

      {SAVEDBASKET-ReplaceWithBasketSelection}
         ~SAVEDBASKET-ReplaceWithBasketSelection~
         <input type="submit" name="~BT-SavedBasket_replace_confirm~" value="Ersetzen">
      {/SAVEDBASKET-ReplaceWithBasketSelection}
   </form>
{/FORM-SaveBasket}
```

> [!WARNING]
>
> Die Form heißt im Shopsystem `FORM-SaveBasket`, also ohne **d**. Umgekehrt heißt die zweite Form `FORM-SavedBasketManage`, **mit** d, und nicht `FORM-SaveBasketManage`, wie die Querverweise der Schaltflächenseiten schreiben.

Die Klammerung `FORM-SaveBasket` blendet die ganze Form aus, wenn der Warenkorb leer ist oder der Käufer die Höchstzahl gespeicherter Warenkörbe schon erreicht hat. Legen Sie die Form deshalb immer in diese Klammerung.

Die beiden Auswahllisten unterscheiden sich in ihrem Inhalt. Anhängen geht nur bei Warenkörben, die noch Platz für weitere Positionen haben, ersetzen bei allen. Deshalb gibt es zwei getrennte Tags und nicht eine Liste für beides.

`SAVEDBASKET-Description_input` liefert den festen Namen `input_savedbasket_descr`.

* Referenz: `FORM-SaveBasket` und `FORM-SavedBasketManage` auf der Seite FORM- (Formulare)
* Referenz: die vier `BT-SavedBasket_`Schaltflächen auf der Seite [BT- (Buttons)](https://dokumentation.websale.de/v8s/referenz/tags/bt/adressen.md)

## Die Liste der gespeicherten Warenkörbe

`SAVEDBASKET-Baskets` ist auch die Schleife über die Liste. Innerhalb davon beschreiben sechs Tags den einzelnen Eintrag.

| Tag | Liefert |
| - | - |
| `SAVEDBASKET-BasketsCounter` | die laufende Nummer in der Liste |
| `SAVEDBASKET-Description` | den Namen des gespeicherten Warenkorbs |
| `SAVEDBASKET-NumberOfPositions` | die Zahl der Positionen |
| `SAVEDBASKET-NumberOfProducts` | die Zahl der Produkte |
| `SAVEDBASKET-Created-Date` und `SAVEDBASKET-Created-Time` | wann er angelegt wurde |
| `SAVEDBASKET-Expires-Date` und `SAVEDBASKET-Expires-Time` | wann er verfällt |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@SAVEDBASKET-Baskets}
   <tr>
      <td>~SAVEDBASKET-BasketsCounter~</td>
      <td>{SAVEDBASKET-Description}~SAVEDBASKET-Description~{/SAVEDBASKET-Description}</td>
      <td>~SAVEDBASKET-NumberOfPositions~ Positionen, ~SAVEDBASKET-NumberOfProducts~ Produkte</td>
      <td>~SAVEDBASKET-Created-Date~</td>
   </tr>
{/@SAVEDBASKET-Baskets}
```

Positionen und Produkte sind nicht dasselbe. Eine Position ist eine Zeile, die Zahl der Produkte zählt die Mengen zusammen. Beide Tags greifen als Klammerung, wenn ihr Wert über null liegt.

Der Verfallszeitpunkt liegt zehn Jahre nach dem Anlegen. Er lässt sich im Shop nicht einstellen, gehört aber in die Anzeige, wenn Sie Käufer auf alte Vorlagen hinweisen wollen.

Dieselben Tags funktionieren auch außerhalb der Schleife. Steht gerade ein einzelner gespeicherter Warenkorb im Mittelpunkt, beispielsweise im Hauptbereich Bearbeiten oder in einer Rückfrage, beziehen sie sich auf diesen. Sie schreiben die Anzeige eines Eintrags also nur einmal und verwenden sie an beiden Stellen.

## Was sich mit einem Eintrag anstellen lässt

Innerhalb der Schleife liefern fünf Tags die Adressen für die möglichen Aktionen.

| Tag | Führt zu |
| - | - |
| `SAVEDBASKET-EditLink` | dem Bearbeiten des Eintrags |
| `SAVEDBASKET-UseLink` | dem Bearbeiten und Verwenden des Eintrags |
| `SAVEDBASKET-AddBasketToSavedBasketLink` | dem Anhängen des aktuellen Warenkorbs an diesen Eintrag |
| `SAVEDBASKET-DeleteSavedBasketLink` | der Rückfrage vor dem Löschen |
| `SAVEDBASKET-DeleteSavedBasketNoConfirmLink` | dem sofortigen Löschen |
| `SAVEDBASKET-ReplaceWithBasketLink` | der Rückfrage vor dem Ersetzen |
| `SAVEDBASKET-ReplaceWithBasketNoConfirmLink` | dem sofortigen Ersetzen |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@SAVEDBASKET-Baskets}
   <a href="~SAVEDBASKET-EditLink~">Bearbeiten</a>

   {SAVEDBASKET-AddBasketToSavedBasketLink}
      <a href="~SAVEDBASKET-AddBasketToSavedBasketLink~">Aktuellen Warenkorb anhängen</a>
   {/SAVEDBASKET-AddBasketToSavedBasketLink}

   <a href="~SAVEDBASKET-DeleteSavedBasketLink~">Löschen</a>
{/@SAVEDBASKET-Baskets}
```

> [!WARNING]
>
> Die beiden `NoConfirm`-Fassungen führen die Aktion sofort aus. Ein Klick auf `SAVEDBASKET-DeleteSavedBasketNoConfirmLink` löscht den gespeicherten Warenkorb ohne Rückfrage. Verwenden Sie sie nur, wenn Sie die Rückfrage selbst im Browser stellen.

`SAVEDBASKET-AddBasketToSavedBasketLink` greift als Klammerung und blendet sich aus, sobald dieser Warenkorb die Höchstzahl an Positionen erreicht hat. Die übrigen Linktags sind reine Einzel-Tags.

Alle Linktags erzeugen gesicherte Adressen und nehmen die Kennung des betroffenen Warenkorbs mit. Sie brauchen also keinen eigenen Parameter anzuhängen.

## Die vier Hauptbereiche des Verwaltungstemplates

Das Template `SavedBasketsManage` bedient vier Zustände. Welcher gerade gilt, sagen vier Klammerungen. Jede davon gibt es auch in der negativen Fassung.

| Tag | Zeigt |
| - | - |
| `SAVEDBASKET-Overview` | die Übersicht über alle gespeicherten Warenkörbe |
| `SAVEDBASKET-Edit` | das Bearbeiten eines einzelnen Warenkorbs |
| `SAVEDBASKET-ConfirmDelete` | die Rückfrage vor dem Löschen |
| `SAVEDBASKET-ConfirmReplace` | die Rückfrage vor dem Ersetzen |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{SAVEDBASKET-Overview}
   <h1>Ihre gespeicherten Warenkörbe</h1>
   {@SAVEDBASKET-Baskets}
      ...
   {/@SAVEDBASKET-Baskets}
{/SAVEDBASKET-Overview}

{SAVEDBASKET-ConfirmDelete}
   <p>Soll der Warenkorb "~SAVEDBASKET-Description~" wirklich gelöscht werden?</p>
   <a href="~SAVEDBASKET-DeleteSavedBasketNoConfirmLink~">Ja, löschen</a>
   <a href="~SAVEDBASKET-BackLink~">Abbrechen</a>
{/SAVEDBASKET-ConfirmDelete}
```

Genau einer der vier Bereiche ist jeweils aktiv. Legen Sie das ganze Template in diese vier Klammerungen, dann bauen Sie vier Ansichten in einer Datei.

`SAVEDBASKET-BackLink` führt dorthin zurück, wo der Käufer hergekommen ist, also entweder auf den Warenkorb oder auf die Übersicht. Sie brauchen dafür keine Fallunterscheidung im Template.

> [!WARNING]
>
> `SAVEDBASKET-BackLink` ist ausschließlich ein Einzel-Tag. Beides trifft nicht zu, als Klammerung gibt das Tag nichts aus.

## Die Positionen eines gespeicherten Warenkorbs

Im Hauptbereich Bearbeiten laufen Sie mit `PR-Data` über die Positionen. Innerhalb dieser Schleife stehen die gewohnten Produktdaten-Tags zur Verfügung, dazu einige Tags, die es nur hier gibt.

| Tag | Liefert |
| - | - |
| `PR-SavedBasketQuantity` | die gespeicherte Menge |
| `PR-SavedBasketVariations` | die gespeicherten Varianten und Texteingabefelder |
| `PR-SavedBasketDeleteEntry` | den HTML-Namen zum Entfernen der Position |
| `ST-SavedBasketPosition_OK` | Klammerung: ist die Position im Shop noch bestellbar |
| `SAVEDBASKET-PositionEmployeeID` | die Mitarbeiterkennung der Position |
| `SAVEDBASKET-PositionGiftPackage` | Klammerung: wurde eine Geschenkverpackung gewählt |
| `SAVEDBASKET-CommissionInfo` | die Kommissionsangabe der Position |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{FORM-SavedBasketManage}
   <form method="post" action="~FORM-SavedBasketManage~">
      {@PR-Data}
         {ST-SavedBasketPosition_OK}
            ~PR-Name~
            {PR-SavedBasketVariations}~PR-SavedBasketVariations~{/PR-SavedBasketVariations}
            ~PR-SavedBasketQuantity~
         {/ST-SavedBasketPosition_OK}

         {!ST-SavedBasketPosition_OK}
            <p class="hinweis">~PR-Name~ ist derzeit nicht bestellbar.</p>
         {/!ST-SavedBasketPosition_OK}
      {/@PR-Data}

      <input type="submit" name="~BT-SavedBasket_Save~" value="Änderungen übernehmen">
   </form>
{/FORM-SavedBasketManage}
```

> [!WARNING]
>
> Ein gespeicherter Warenkorb kann Jahre alt sein. Produkte verschwinden aus dem Sortiment, Varianten entfallen, Eingabefelder ändern sich. Klammern Sie die Position deshalb immer mit `ST-SavedBasketPosition_OK` und sagen Sie dem Käufer im negativen Fall, was mit dieser Zeile ist. Ohne diese Klammerung landet er mit einem Fehler im Bestellvorgang.

Das Tag gibt die zur Position gespeicherte Kommissionsangabe aus und greift als Klammerung, wenn eine vorliegt. Es funktioniert nur, wenn das Mitspeichern der Kommissionsangabe im Shop eingeschaltet ist, sonst gilt es als ungültiges Tag.

* Referenz: die drei `PR-SavedBasket`Tags auf der Seite PR- (Grundlagen und Produktdaten)
* Referenz: `ST-SavedBasketPosition_OK` auf der Seite [ST- (Status)](https://dokumentation.websale.de/v8s/referenz/tags/st/seitenzustand-und-navigation.md)

## Rückmeldungen an den Käufer

| Tag | Liefert |
| - | - |
| `SAVEDBASKET-AffectedBasket` | den Namen des Warenkorbs, den die letzte Aktion betroffen hat |
| `MSG-SavedBasket_notify` | die Hinweismeldung zur letzten Aktion |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{MSG-SavedBasket_notify}
   <p class="hinweis">
      ~MSG-SavedBasket_notify~
      {SAVEDBASKET-AffectedBasket}(~SAVEDBASKET-AffectedBasket~){/SAVEDBASKET-AffectedBasket}
   </p>
{/MSG-SavedBasket_notify}
```

`SAVEDBASKET-AffectedBasket` funktioniert auch nach dem Löschen. Das Shopsystem merkt sich den Namen des gelöschten Warenkorbs, damit die Meldung "… wurde gelöscht" den Namen noch nennen kann.

Referenz: `MSG-SavedBasket_notify` auf der Seite MSG- (Meldungen)

## Die Tags im Überblick

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `SAVEDBASKET-Baskets` | ja | ja | ja | ja |
| `SAVEDBASKET-BasketsCounter` | ja | – | – | – |
| `SAVEDBASKET-Description` | ja | ja | ja | – |
| `SAVEDBASKET-Description_input` | ja | – | – | – |
| `SAVEDBASKET-NumberOfPositions` | ja | ja | ja | – |
| `SAVEDBASKET-NumberOfProducts` | ja | ja | ja | – |
| `SAVEDBASKET-Created-Date` | ja | ja | ja | – |
| `SAVEDBASKET-Created-Time` | ja | ja | ja | – |
| `SAVEDBASKET-Expires-Date` | ja | ja | ja | – |
| `SAVEDBASKET-Expires-Time` | ja | ja | ja | – |
| `SAVEDBASKET-NewSavedBasketsLeft` | – | ja | ja | – |
| `SAVEDBASKET-AddToSavedBasketSelection` | ja | ja | ja | – |
| `SAVEDBASKET-ReplaceWithBasketSelection` | ja | ja | ja | – |
| `SAVEDBASKET-EditLink` | ja | – | – | – |
| `SAVEDBASKET-UseLink` | ja | – | – | – |
| `SAVEDBASKET-AddBasketToSavedBasketLink` | ja | ja | ja | – |
| `SAVEDBASKET-DeleteSavedBasketLink` | ja | – | – | – |
| `SAVEDBASKET-DeleteSavedBasketNoConfirmLink` | ja | – | – | – |
| `SAVEDBASKET-ReplaceWithBasketLink` | ja | – | – | – |
| `SAVEDBASKET-ReplaceWithBasketNoConfirmLink` | ja | – | – | – |
| `SAVEDBASKET-BackLink` | ja | – | – | – |
| `SAVEDBASKET-Overview` | – | ja | ja | – |
| `SAVEDBASKET-Edit` | – | ja | ja | – |
| `SAVEDBASKET-ConfirmDelete` | – | ja | ja | – |
| `SAVEDBASKET-ConfirmReplace` | – | ja | ja | – |
| `SAVEDBASKET-PositionEmployeeID` | ja | ja | ja | – |
| `SAVEDBASKET-PositionGiftPackage` | – | ja | ja | – |
| `SAVEDBASKET-CommissionInfo` | ja | ja | ja | – |
| `SAVEDBASKET-AffectedBasket` | ja | ja | ja | – |

`SAVEDBASKET-Baskets` und `SAVEDBASKET-NewSavedBasketsLeft` sind auf allen Templates zulässig. Die vier Bereichs-Tags gelten nur auf `SavedBasketsManage`. Die Eintrags-Tags stehen innerhalb der `SAVEDBASKET-Baskets`-Schleife und zusätzlich in den Hauptbereichen Bearbeiten, Löschen bestätigen und Ersetzen bestätigen. Die drei Positions-Tags gehören in die `PR-Data`-Schleife des Hauptbereichs Bearbeiten.

## Verwandte Themen

* Wegweiser: Speicherbare Warenkörbe
* Referenz: [FORM- (Formulare)](https://dokumentation.websale.de/v8s/referenz/tags/form-formulare.md)
* Referenz: BT- (Buttons)
* Referenz: [MSG- (Meldungen)](https://dokumentation.websale.de/v8s/referenz/tags/msg-meldungen.md)
* Referenz: [PR- (Grundlagen und Produktdaten)](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md)


## Related topics

- [Styles für Warenkorb und Bestellung](https://dokumentation.websale.de/v8s/referenz/styles/warenkorb-und-bestellung.md)
- [Speicherbarer Warenkorb](https://dokumentation.websale.de/v8s/warenkorb/speicherbarer-warenkorb.md)
- [Texte und Meldungen](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/texte-und-meldungen.md)
- [CSS](https://dokumentation.websale.de/v8s/templates/css.md)
- [Praxisbeispiele - Gutscheine](https://dokumentation.websale.de/frontend/praxisbeispiele/gutscheine.md)


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