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

# DC- (Schleifen)

> Eigene Schleifen im Template: einen Block eine feste Anzahl Male wiederholen oder eine selbst zusammengestellte Liste durchlaufen.

Die meisten Schleifen im Shop laufen von selbst: `{@PR-Data}` durchläuft die Produkte einer Kategorie, `{@BASKET-PR-Data}` die Positionen im Warenkorb. Manchmal brauchen Sie aber eine Schleife, für die es kein fertiges Tag gibt, beispielsweise fünf Bewertungssterne oder eine Liste, die Sie selbst zusammenstellen.

Dafür gibt es drei Schleifenfamilien.

| Familie | Durchläuft | Position zählt |
| - | - | - |
| `DC-Loop1…3` | eine feste Anzahl Durchläufe | ab 1 |
| `DC-ZeroLoopX` | eine feste Anzahl Durchläufe | ab 0 |
| `DC-DynamicLoop1…3` | die Einträge einer Liste, die Sie übergeben | ab 1 |

Der Unterschied zwischen `DC-Loop` und `DC-ZeroLoop` ist allein die Zählweise. Bei fünf Durchläufen liefert `DC-Loop1_position` die Werte 1 bis 5, `DC-ZeroLoopX_position` die Werte 0 bis 4. Nehmen Sie `DC-ZeroLoop`, wenn die Position als Index in eine andere Zählung eingeht, die bei 0 beginnt.

## Der Aufbau einer eigenen Schleife

Jede der drei Familien wird nach demselben Muster benutzt.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-Loop1_set(7)~          <!-- Anzahl festlegen -->

{DC-Loop1}                 <!-- nur ausgeben, wenn überhaupt etwas zu tun ist -->
   {@DC-Loop1}             <!-- der eigentliche Schleifenkörper -->
      <img src="stern.svg" alt="">
   {/@DC-Loop1}
{/DC-Loop1}
```

Die äußere Klammerung ist kein Selbstzweck. Sie greift nur, wenn die Anzahl größer als 0 ist, und hält damit Überschriften, Tabellenrahmen und Listengerüste aus der Seite heraus, wenn es nichts zu zeigen gibt.

| Schreibweise | Bedeutung |
| - | - |
| `~DC-Loop1~` | gibt die festgelegte Anzahl aus |
| `{DC-Loop1}…{/DC-Loop1}` | greift, wenn die Anzahl größer als 0 ist |
| `{!DC-Loop1}…{/!DC-Loop1}` | greift, wenn die Anzahl 0 ist |
| `{@DC-Loop1}…{/@DC-Loop1}` | wiederholt den Inhalt |
| `~DC-Loop1_position~` | gibt im Schleifenkörper den aktuellen Durchlauf aus |

## Eine feste Anzahl Durchläufe

`DC-Loop1_set()` legt die Anzahl fest. Das Argument ist Tag-in-Tag-fähig, die Anzahl kann also aus einem anderen Tag kommen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-Loop1_set($PR-Rating$)~

{DC-Loop1}
   {@DC-Loop1}
      <img src="stern-voll.svg" alt="">
   {/@DC-Loop1}
{/DC-Loop1}

{!DC-Loop1}
   <span class="hinweis">Noch nicht bewertet</span>
{/!DC-Loop1}
```

> [!WARNING]
>
> Ein negativer Wert wird zu 0, ein sehr großer Wert wird nach oben gekappt. Die Schleife bricht also nicht ab, sondern läuft still mit einer anderen Anzahl als gedacht. Prüfen Sie den Wert, wenn er aus einer Datenquelle stammt.

### DC-ZeroLoop

`DC-ZeroLoopX` funktioniert genauso, zählt aber ab 0.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-ZeroLoop1_set(5)~

{@DC-ZeroLoop1}
   Position ~DC-ZeroLoop1_position~   <!-- 0, 1, 2, 3, 4 -->
{/@DC-ZeroLoop1}
```

Anders als bei `DC-Loop` ist das `X` bei `DC-ZeroLoop` kein Platz für eine Ziffer von 1 bis 3, sondern ein frei wählbarer Name, genau wie bei den freien Parametern. `DC-ZeroLoopSpalten` und `DC-ZeroLoopZeilen` sind zwei unabhängige Schleifen. Höchstens 50 verschiedene Namen sind je Seitenaufruf möglich, darüber hinaus legt der Shop keine weitere Schleife mehr an und schreibt einen kritischen Fehler ins Protokoll.

## Eine eigene Liste durchlaufen

`DC-DynamicLoop1…3` bekommt eine Liste übergeben und durchläuft deren Einträge.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_set(Tom Waits,Michael Jackson,Nina Hagen)~

{DC-DynamicLoop1}
   <label for="top3">Künstlerin oder Künstler</label>
   <select id="top3" name="top3" size="3">
      {@DC-DynamicLoop1}
         <option>~DC-DynamicLoop1_data~</option>
      {/@DC-DynamicLoop1}
   </select>
{/DC-DynamicLoop1}
```

| Tag | Wirkung |
| - | - |
| `DC-DynamicLoop1…3_set()` | übergibt die Liste |
| `DC-DynamicLoop1…3` | als Einzel-Tag die Anzahl der Einträge, als Bereichs-Tag die Prüfung auf Einträge, als Schleifen-Tag der Durchlauf |
| `DC-DynamicLoop1…3_data` | gibt im Schleifenkörper den aktuellen Eintrag aus |
| `DC-DynamicLoop1…3_position` | gibt im Schleifenkörper die laufende Nummer aus |

Als Argument von `_set()` sind zulässig: eine feste Liste im Template, ein anderes Tag als Tag-in-Tag oder eine Textvariable.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_set(%%Musiker%%)~
~DC-DynamicLoop2_set($CAT-SubCatIndexList$)~
```

Leere Einträge entfallen, und Leerzeichen am Anfang und Ende jedes Eintrags werden abgeschnitten. Aus `a, ,b , c` werden also die drei Einträge `a`, `b` und `c`.

> [!WARNING]
>
> `_set()` darf nicht innerhalb der eigenen Schleife stehen. Der Shop verwirft das Tag in diesem Fall. Setzen Sie die Liste vor `{DC-DynamicLoop1}`.

Für die Liste selbst gilt die 128-Zeichen-Grenze der WEBSALE-Tags nicht, sofern sie über Tag-in-Tag hereinkommt. Steht sie als fester Text im Tag, gilt die Grenze sehr wohl. Bauen Sie lange feste Listen deshalb mit `DC-FPX_append()` zusammen und übergeben Sie sie als Tag-in-Tag.

Referenz: [DC-FPX\_append](https://dokumentation.websale.de/v8s/referenz/tags/dc/parameter.md#die-tags-im-uberblick)

### Ein anderes Trennzeichen

Wenn die Einträge selbst Kommas enthalten, brauchen Sie ein anderes Trennzeichen. `_setseparator()` legt es fest.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_setseparator(-)~
~DC-DynamicLoop1_set(Tom Waits, amerikanischer Sänger-Michael Jackson, King of Pop-Nina Hagen, deutsche Sängerin)~

{@DC-DynamicLoop1}
   <option>~DC-DynamicLoop1_data~</option>
{/@DC-DynamicLoop1}
```

> [!WARNING]
>
> `_setseparator()` muss vor `_set()` stehen. Danach gesetzt, hat es keine Wirkung mehr, weil die Liste zu diesem Zeitpunkt bereits zerlegt ist.

Das Trennzeichen darf auch mehrere Zeichen lang sein, beispielsweise `||`. Groß- und Kleinschreibung spielt dabei keine Rolle.

### Einträge mit Markierungen

Kommt die Liste aus einem Fremdsystem und sind die Einträge dort von Markierungen umschlossen statt durch ein Zeichen getrennt, verwenden Sie `_setSeparatorTags()` und `_settaggeddata()`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_setSeparatorTags(<c>,</c>)~
~DC-DynamicLoop1_settaggeddata(<c>EUR</c><c>USD</c><c>CHF</c>)~

{@DC-DynamicLoop1}
   - ~DC-DynamicLoop1_data~
{/@DC-DynamicLoop1}
```

> [!WARNING]
>
> Auch hier gilt die Reihenfolge: `_setSeparatorTags()` legt die beiden Markierungen fest und muss vor `_settaggeddata()` stehen.

`_settaggeddata()` unterstützt Tag-in-Tag. Damit lässt sich die Antwort einer Schnittstelle direkt in eine Schleife überführen, ohne sie vorher umzuformen.

* Wegweiser: Produkte und Kategorien an beliebiger Stelle im Shop anzeigen
* Wegweiser: [Gutscheine mit mehreren Währungen](https://dokumentation.websale.de/v8s/gutscheine-anbieten/gutscheine-mit-mehreren-waehrungen.md)

## Die Tags im Überblick

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `DC-Loop1…3` | ja | ja | ja | ja |
| `DC-Loop1…3_set()` | ja | – | – | – |
| `DC-Loop1…3_position` | ja | – | – | – |
| `DC-ZeroLoopX` | ja | ja | ja | ja |
| `DC-ZeroLoopX_set()` | ja | – | – | – |
| `DC-ZeroLoopX_position` | ja | – | – | – |
| `DC-DynamicLoop1…3` | ja | ja | ja | ja |
| `DC-DynamicLoop1…3_set()` | ja | – | – | – |
| `DC-DynamicLoop1…3_data` | ja | – | – | – |
| `DC-DynamicLoop1…3_position` | ja | – | – | – |
| `DC-DynamicLoop1…3_setseparator()` | ja | – | – | – |
| `DC-DynamicLoop1…3_setSeparatorTags()` | ja | – | – | – |
| `DC-DynamicLoop1…3_settaggeddata()` | ja | – | – | – |

Zulässig sind alle Tags auf allen Templates. `_data` und `_position` geben nur innerhalb der zugehörigen Schleife etwas aus.

## Verwandte Themen

* Wegweiser: Produkte und Kategorien an beliebiger Stelle im Shop anzeigen
* Wegweiser: [Gutscheine mit mehreren Währungen](https://dokumentation.websale.de/v8s/gutscheine-anbieten/gutscheine-mit-mehreren-waehrungen.md)
* Referenz: [DC- (Zähler und Rechnen)](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md)
* Grundlagen: [Grundlagen zu Tags](https://dokumentation.websale.de/v8s/grundlagen-zu-tags.md)


## Related topics

- [DC- (Zähler und Rechnen)](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md)
- [DC- (Freie Parameter und Session-Parameter)](https://dokumentation.websale.de/v8s/referenz/tags/dc/parameter.md)
- [EJD- (JSON-Schnittstelle)](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md)
- [DC- (Cookie-Daten)](https://dokumentation.websale.de/v8s/referenz/tags/dc/cookie-daten.md)
- [DC- (Datum und Zeit)](https://dokumentation.websale.de/v8s/referenz/tags/dc/datum-und-zeit.md)


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