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

# $wsBasket - Warenkorb

> Warenkorbdaten im Frontend lesen: Positionen, Mengen, Beträge, Rabatte und Steuerinformationen für Mini-Cart, Übersicht und Checkout-Schritte.

Mit dem `$wsBasket`-Modul lesen Sie die Daten des aktuellen Warenkorbs im Frontend. Die enthaltenen Produkte (Positionen), deren Mengen und Preise sowie die berechneten Gesamtwerte und Steuerinformationen.

Auf dieser Seite geht es um das Lesen der Warenkorb-Daten. Alles, was den Warenkorb verändert (Produkt hinzufügen, Menge ändern, entfernen), ist unter [Aktionen → Basket](/frontend/referenz/aktionen/basket) beschrieben, weil dort die auslösenden Aktionen und ihre Parameter dokumentiert sind.

***

## Grundkonzept

Der Warenkorb speichert die vom Kunden ausgewählten Produkte und berechnet automatisch die Mengen, Preise und Steuern. Über dieses Modul können Sie diese Werte auslesen und anzeigen.

### Aufbau

Die Warenkorb-Daten sind in drei Ebenen verschachtelt:

* **Warenkorb** (`$wsBasket`) - die Gesamtwerte über alle Positionen hinweg, z. B. `total` oder [`totalQuantity`](#wsbasket-totalquantity).
* **Positionen** (`$wsBasket.items`) - eine Liste der Warenkorb-Einträge. Jeder Eintrag steht für ein Produkt im Warenkorb und hat eigene Werte wie Menge und Positionssumme.
* **Produkt** (`item.product`) - innerhalb jeder Position befindet sich auch das zugehörige Produkt mit seinen Stammdaten (Name, Bild, ID).

Sie lesen also Summen vom Warenkorb, positionsbezogene Werte von der jeweiligen Position und Produktdetails vom Produkt der Position.

### Steuerbefreiung

Mehrere Variablen bilden zusammen die Steuerbefreiung ab und gehören inhaltlich zusammen: [`isTaxExempt`](#wsbasket-istaxexempt) ist der primäre Schalter, [`totalTaxDeduction`](#wsbasket-totaltaxdeduction) und [`totalPreDeduction`](#wsbasket-totalprededuction) liefern die Beträge für eine „abzgl. MwSt."-Zeile, und [`usedExemptionRule`](#wsbasket-usedexemptionrule) zusammen mit [`billingCountry`](#wsbasket-billingcountry)/[`shippingCountry`](#wsbasket-shippingcountry) zeigt, welche Adressen für die Prüfung herangezogen werden. Prüfen Sie für Steuerhinweise immer zuerst `isTaxExempt`.

### Zeitpunkt und zuletzt geänderter Artikel

Der Template-Code läuft beim Seitenaufbau. `$wsBasket` enthält daher den Warenkorb-Zustand nach der zuletzt ausgeführten Aktion. [`lastBasketAction`](#wsbasket-lastbasketaction) und `lastUpdatedItem` beschreiben diese letzte Änderung. Nützlich, um beispielsweise direkt nach dem Hinzufügen eine Rückmeldung wie „Produkt X wurde hinzugefügt" anzuzeigen.

***

## Modulübersicht

**Beispiel / Ausschnitt über** `$wsBasket`

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{= $wsBasket | json }}
```

**JSON-Ausgabe**

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "billingCountry": "...",
  "isTaxExempt": true,
  "items": [
    {
      "discountPrice": 0.0,
      "freeFields": { },
      "id": "...",
      "oneTimeFee": 0.0,
      "orgPrice": 0.0,
      "price": 0.0,
      "product": { },
      "quantity": 0.0,
      "total": 0.0,
      "totalGross": 0.0,
      "totalNet": 0.0,
      "totalTax": 0.0,
      "voucherIds": [...]
    }
  ],
  "lastBasketAction": "...",
  "lastUpdatedItem": {
    "categories": [...],
    "freeFields": { },
    "id": "...",
    "parentCategories": [...],
    "price": 0.0,
    "productNumber": "...",
    "quantity": 0.0,
    "taxId": "...",
    "voucherIds": [...]
  },
  "shippingCountry": "...",
  "total": 0.0,
  "totalCommission": 0.0,
  "totalGross": 0.0,
  "totalNet": 0.0,
  "totalQuantity": 0.0,
  "totalTax": 0.0,
  "totalTaxDeduction": 0.0,
  "totalPreDeduction": 0.0,
  "totalWeight": 0.0,
  "usedExemptionRule": "..."
}
```

**Variablen des Warenkorbs (oberste Ebene)**

| **Variable**        | **Rückgabe-Typ** | **Beschreibung**                                                       |
| ------------------- | ---------------- | ---------------------------------------------------------------------- |
| `totalQuantity`     | float            | Gesamtmenge aller Produkte im Warenkorb.                               |
| `total`             | float            | Gesamtbetrag des Warenkorbs.                                           |
| `totalNet`          | float            | Nettobetrag des Warenkorbs.                                            |
| `totalGross`        | float            | Bruttobetrag des Warenkorbs.                                           |
| `totalTax`          | float            | Mehrwertsteuer des Warenkorbs.                                         |
| `totalCommission`   | float            | Gesamt-Provision.                                                      |
| `totalWeight`       | float            | Gesamtgewicht aller Produkte im Warenkorb.                             |
| `lastBasketAction`  | string           | Letzte Aktion am Warenkorb (z. B. `"add"`, `"remove"`, `"update"`).    |
| `lastUpdatedItem`   | map              | Zuletzt geänderter Artikel (Struktur siehe unten).                     |
| `items`             | array            | Liste aller Warenkorb-Einträge (Struktur siehe unten).                 |
| `isTaxExempt`       | bool             | Ob der aktuelle Warenkorb steuerbefreit ist.                           |
| `totalTaxDeduction` | float            | Betrag der abgezogenen Steuer; nur > 0 bei aktiver Steuerbefreiung.    |
| `totalPreDeduction` | float            | Gesamtbetrag vor dem Steuerabzug.                                      |
| `billingCountry`    | string           | Länderkennung der Rechnungsadresse (z. B. `"DE"`).                     |
| `shippingCountry`   | string           | Länderkennung der Lieferadresse (z. B. `"DE"`).                        |
| `usedExemptionRule` | string           | Aktive Steuerprüfregel (`"shippingOnly"` oder `"shippingAndBilling"`). |

***

## Templates

Die Warenkorb-Daten lassen sich auf jeder Seite des Shops anzeigen. Übliche Darstellungen sind:

* **Offcanvas-Warenkorb:** in einer Sidebar, als Flyout oder als OffCanvas-Element, für einen schnellen Überblick.
* **Warenkorb-Seite:** eine detaillierte Übersicht mit Anpassungsmöglichkeiten.
* **Checkout und Bestellbestätigung:** Darstellung während des Kaufprozesses und in Bestätigungs-E-Mails.

***

## Variablen

### \$wsBasket.totalQuantity

Gibt die Gesamtmenge aller Produkte im Warenkorb aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Artikel im Warenkorb: {{= $wsBasket.totalQuantity }}
```

### \$wsBasket.total

Gibt den Gesamtbetrag des Warenkorbs aus. Verwenden Sie ihn für die Endsumme in Warenkorb und Checkout.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Gesamtbetrag: {{= $wsBasket.total | currency }}
```

### \$wsBasket.totalNet

Gibt den Nettobetrag des Warenkorbs aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Nettobetrag: {{= $wsBasket.totalNet | currency }}
```

### \$wsBasket.totalGross

Gibt den Bruttobetrag des Warenkorbs aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Bruttobetrag: {{= $wsBasket.totalGross | currency }}
```

### \$wsBasket.totalTax

Gibt die Mehrwertsteuer des Warenkorbs aus. Nutzen Sie sie für eine separate Steuerzeile in der Summenübersicht.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Mehrwertsteuer: {{= $wsBasket.totalTax | currency }}
```

### \$wsBasket.totalCommission

Gibt die Gesamt-Provision des Warenkorbs aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Provision: {{= $wsBasket.totalCommission | currency }}
```

### \$wsBasket.totalWeight

Gibt das Gesamtgewicht aller Produkte im Warenkorb aus. Nützlich, um z. B. einen Versandkosten- oder Gewichtshinweis anzuzeigen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Gesamtgewicht: {{= $wsBasket.totalWeight }}
```

### \$wsBasket.lastBasketAction

Gibt die zuletzt am Warenkorb durchgeführte Aktion aus (z. B. `"add"`, `"remove"`, `"update"`). Werten Sie sie aus, um nach einer Änderung eine passende Rückmeldung anzuzeigen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Letzte Aktion: {{= $wsBasket.lastBasketAction }}
```

### \$wsBasket.lastUpdatedItem

Gibt den zuletzt hinzugefügten oder geänderten Artikel aus. Verwenden Sie ihn zusammen mit `lastBasketAction`, um z. B. direkt nach dem Hinzufügen „Produkt X wurde hinzugefügt" anzuzeigen, ohne den ganzen Warenkorb durchsuchen zu müssen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Zuletzt geändert: {{= $wsBasket.lastUpdatedItem.id }}
Menge: {{= int($wsBasket.lastUpdatedItem.quantity) }}
```

#### Eigenschaften von `$wsBasket.lastUpdatedItem`

| **Eigenschaft**    | **Rückgabe-Typ** | **Beschreibung**                                   |
| ------------------ | ---------------- | -------------------------------------------------- |
| `id`               | string           | Produkt-ID des Artikels.                           |
| `productNumber`    | string           | Artikelnummer des Artikels.                        |
| `price`            | float            | Preis des Artikels.                                |
| `quantity`         | float            | Menge des Artikels.                                |
| `taxId`            | string           | Steuersatz-ID des Artikels.                        |
| `categories`       | array            | Kategorie-IDs, in denen sich der Artikel befindet. |
| `parentCategories` | array            | Übergeordnete Kategorie-IDs des Artikels.          |
| `freeFields`       | map              | Freie Felder des Artikels.                         |
| `voucherIds`       | array            | Angewendete Gutschein-IDs für den Artikel.         |

### \$wsBasket.items

Gibt die Liste aller Warenkorb-Einträge (Positionen) aus. Über diese Liste iterieren Sie, um jede Position einzeln anzuzeigen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ foreach $item in $wsBasket.items }}
  Artikel: {{= $item.product.name }} – Menge: {{= int($item.quantity) }}
{{ /foreach }}
```

#### Eigenschaften eines Eintrags in `$wsBasket.items`

| **Eigenschaft** | **Rückgabe-Typ** | **Beschreibung**                                                     |
| --------------- | ---------------- | -------------------------------------------------------------------- |
| `id`            | string           | Warenkorb-ID des Eintrags.                                           |
| `product`       | map              | Das zugehörige Produkt des Eintrags (Stammdaten wie Name, Bild, ID). |
| `quantity`      | float            | Menge des Eintrags.                                                  |
| `price`         | float            | Einzelpreis des Eintrags.                                            |
| `orgPrice`      | float            | Ursprünglicher Preis vor Rabatten.                                   |
| `discountPrice` | float            | Rabattierter Preis (falls ein Rabatt aktiv ist).                     |
| `oneTimeFee`    | float            | Einmalige Gebühr (z. B. Einrichtungskosten).                         |
| `total`         | float            | Gesamtbetrag des Eintrags (Positionssumme).                          |
| `totalNet`      | float            | Nettobetrag des Eintrags.                                            |
| `totalGross`    | float            | Bruttobetrag des Eintrags.                                           |
| `totalTax`      | float            | Mehrwertsteuer des Eintrags.                                         |
| `freeFields`    | map              | Freie Felder (z. B. Beschriftungen, Kommentare).                     |
| `voucherIds`    | array            | Angewendete Gutschein-IDs für diesen Eintrag.                        |

### \$wsBasket.isTaxExempt

Gibt aus, ob der aktuelle Warenkorb steuerbefreit ist. Dies ist der primäre Indikator für eine Steuerbefreiung – nutzen Sie ihn, um z. B. einen Hinweis „Steuerbefreite Lieferung" einzublenden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.isTaxExempt }}
  Dieser Warenkorb ist steuerbefreit.
{{ /if }}
```

### \$wsBasket.totalTaxDeduction

Gibt den Betrag der abgezogenen Steuer aus. Der Wert ist nur größer als 0, wenn eine Steuerbefreiung aktiv ist. In Brutto-Shops stellen Sie damit z. B. eine Zeile „abzgl. MwSt." dar.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.totalTaxDeduction > 0 }}
  Steuerabzug: {{= $wsBasket.totalTaxDeduction | currency }}
{{ /if }}
```

### \$wsBasket.totalPreDeduction

Gibt den Gesamtbetrag vor dem Steuerabzug aus. Zusammen mit `totalTaxDeduction` zeigen Sie so den Betrag vor und nach dem Abzug.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Betrag vor Steuerabzug: {{= $wsBasket.totalPreDeduction | currency }}
```

### \$wsBasket.billingCountry

Gibt die Länderkennung der Rechnungsadresse aus (z. B. `"DE"` für Deutschland).

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Rechnungsland: {{= $wsBasket.billingCountry }}
```

### \$wsBasket.shippingCountry

Gibt die Länderkennung der Lieferadresse aus (z. B. `"DE"` für Deutschland).

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Lieferland: {{= $wsBasket.shippingCountry }}
```

### \$wsBasket.usedExemptionRule

Gibt die aktive Steuerprüfregel aus. Mögliche Werte: `"shippingOnly"` (nur die Lieferadresse wird geprüft) oder `"shippingAndBilling"` (Liefer- und Rechnungsadresse werden geprüft). So erkennen Sie, welche Adressen über die Steuerbefreiung entscheiden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.usedExemptionRule }}
  Aktive Prüfregel: {{= $wsBasket.usedExemptionRule }}
{{ /if }}
```

***

## Methoden

Für `$wsBasket` stehen keine Methoden zur Verfügung.

***

## Aktionen

Aktionen, die den Warenkorb verändern (Produkt hinzufügen, Menge ändern, entfernen), sind separat dokumentiert: [Aktionen → Basket](/frontend/referenz/aktionen/basket).

***

## Beispiele für den Datenzugriff

### Prüfen, ob Produkte im Warenkorb liegen

Prüfen Sie zuerst, ob überhaupt Positionen vorhanden sind, bevor Sie den Warenkorb anzeigen, sonst zeigen Sie eine leere Liste.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.items }}
  <p>Im Warenkorb befinden sich {{= $wsBasket.items | len }} Positionen.</p>
{{ else }}
  <p>Sie haben noch keine Produkte im Warenkorb.</p>
{{ /if }}
```

**Ergebnis** \
Bei gefülltem Warenkorb erscheint die Anzahl der Positionen, sonst ein Hinweis auf den leeren Warenkorb.

### Produkte im Warenkorb anzeigen

Sind Positionen vorhanden, iterieren Sie über `items` und zeigen je Position Produktname, Menge und Preise. Die Gesamtsummen stehen außerhalb der Schleife weil sie sonst für jede Position erneut ausgegeben werden würden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.items }}
  {{ foreach $item in $wsBasket.items }}
    <a href="{{= $wsViews.url('Product', {productId: $item.product.id}) }}">
      <img src="{{= $item.product.custom.image.normal }}" alt="{{= $item.product.name }}">
    </a>
    <p>Produktname: {{= $item.product.name }}</p>
    <p>Menge: {{= int($item.quantity) }}</p>
    <p>Einzelpreis: {{= $item.price | currency }}</p>
    <p>Positionssumme: {{= $item.total | currency }}</p>
  {{ /foreach }}

  <p>Versandkosten: {{= $wsCheckout.sum.shippingCost | currency }}</p>
  <p>Gesamtsumme: {{= $wsBasket.total | currency }}</p>
{{ else }}
  <p>Sie haben keine Produkte im Warenkorb!</p>
{{ /if }}
```

**Ergebnis** \
Jede Position wird mit Bild, Name, Menge und Preisen aufgelistet. Darunter erscheinen Versandkosten und Gesamtsumme einmalig.

### Link zur Warenkorbseite

Erzeugt einen Link auf die Warenkorbseite, die über das View-Template `basket.htm` umgesetzt ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<a href="{{= $wsViews.viewUrl('basket.htm') }}">Warenkorb ansehen</a>
```

**Ergebnis** \
Der Link führt zur Warenkorbseite des Shops.

***

## Weiterführende Links

* [Aktionen → Basket](/frontend/referenz/aktionen/basket) – den Warenkorb verändern (hinzufügen, ändern, entfernen), weil `$wsBasket` selbst nur liest.
* [\$wsCheckout](/frontend/referenz/module/wscheckout) – liefert ergänzende Werte wie die Versandkosten (`sum.shippingCost`) für die Summenanzeige.
* [\$wsViews](/frontend/referenz/module/wsviews) – erzeugt die in den Beispielen genutzten Produkt- und View-URLs.
* [Praxisbeispiele Warenkorb](/frontend/praxisbeispiele/warenkorb-funktionen) – durchgängige Praxisbeispiele für Warenkorb-Funktionen.

Sind Positionen vorhanden, iterieren Sie über `items` und zeigen je Position Produktname, Menge und Preise. Die Gesamtsummen stehen außerhalb der Schleife weil sie sonst für jede Position erneut ausgegeben werden würden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $wsBasket.items }}
  {{ foreach $item in $wsBasket.items }}
    <a href="{{= $wsViews.url('Product', {productId: $item.product.id}) }}">
      <img src="{{= $item.product.custom.image.normal }}" alt="{{= $item.product.name }}">
    </a>
    <p>Produktname: {{= $item.product.name }}</p>
    <p>Menge: {{= int($item.quantity) }}</p>
    <p>Einzelpreis: {{= $item.price | currency }}</p>
    <p>Positionssumme: {{= $item.total | currency }}</p>
  {{ /foreach }}

  <p>Versandkosten: {{= $wsCheckout.sum.shippingCost | currency }}</p>
  <p>Gesamtsumme: {{= $wsBasket.total | currency }}</p>
{{ else }}
  <p>Sie haben keine Produkte im Warenkorb!</p>
{{ /if }}
```

**Ergebnis** \
Jede Position wird mit Bild, Name, Menge und Preisen aufgelistet. Darunter erscheinen Versandkosten und Gesamtsumme einmalig.

### Link zur Warenkorbseite

Erzeugt einen Link auf die Warenkorbseite, die über das View-Template `basket.htm` umgesetzt ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<a href="{{= $wsViews.viewUrl('basket.htm') }}">Warenkorb ansehen</a>
```

**Ergebnis** \
Der Link führt zur Warenkorbseite des Shops.

***

## Weiterführende Links

* [Aktionen → Basket](/frontend/referenz/aktionen/basket) – den Warenkorb verändern (hinzufügen, ändern, entfernen), weil `$wsBasket` selbst nur liest.
* [\$wsCheckout](/frontend/referenz/module/wscheckout) – liefert ergänzende Werte wie die Versandkosten (`sum.shippingCost`) für die Summenanzeige.
* [\$wsViews](/frontend/referenz/module/wsviews) – erzeugt die in den Beispielen genutzten Produkt- und View-URLs.
* [Praxisbeispiele Warenkorb](/frontend/praxisbeispiele/warenkorb-funktionen) – durchgängige Praxisbeispiele für Warenkorb-Funktionen.
