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

# AC- (AgreementCookies)

> Die Tags für die Einwilligung zur Datenverarbeitung: Dienste abfragen, Gruppierungen darstellen und Tracking-Codes nur bei erteilter Einwilligung ausführen.

Datenschutzrelevante Dienste wie Tracking-Codes, Zählpixel oder eingebundene Karten dürfen erst laufen, wenn der Shopbesucher ihnen zugestimmt hat. Die Tags mit dem Präfix `AC-` bilden diese Einwilligung im Template ab: Sie bauen damit das Einwilligungsbanner, und Sie klammern damit die Dienste selbst ein, sodass ein Dienst ohne Zustimmung gar nicht erst in die Seite gelangt.

## Das Modell dahinter

Drei Ebenen greifen ineinander, und die Tags folgen genau dieser Gliederung:

* **Der einzelne Dienst.** Jeder datenschutzrelevante Dienst wird in der `shop.config` im Abschnitt `<AgreementCookies>` als eigener Eintrag angelegt und bekommt eine ID. Die Tags dazu beginnen mit `AC-Entry`.
* **Die Gruppierung.** Dienste können zu Gruppen zusammengefasst werden, beispielsweise "Statistik" oder "Komfort", sodass der Besucher nicht über jeden einzelnen Dienst entscheiden muss. Die Tags dazu beginnen mit `AC-ConsentGroup`.
* **Alles auf einmal.** Für den Schalter "Alles akzeptieren" gibt es die Tags mit `AC-ConsentAll`.

Dazu kommen einige Tags, die den Zustand der Einwilligung als Ganzes abfragen, beispielsweise ob der Besucher überhaupt schon entschieden hat.

Wegweiser: [Einwilligung zur Datenverarbeitung](https://dokumentation.websale.de/v8s/referenz/verwendete-cookies.md#einwilligung-zur-datenverarbeitung) · Referenz: Abschnitt AgreementCookies

## Voraussetzung: die Funktion einschalten

Alle `AC-`Tags hängen am Parameter `Allow` im Abschnitt `<AgreementCookies>` der `shop.config`.

| Wert | Wirkung |
| - | - |
| `no` | Voreinstellung. Die Einwilligung wird nicht abgefragt. |
| `yes` | Die Einwilligung wird abgefragt und ausgewertet. |
| `test` | Wie `yes`, greift aber nur, solange der Shop im Testmodus läuft. |

> [!WARNING]
>
> Bei `Allow = no` geht der Shop von einer Einwilligung aus: Alle Klammerungen auf den Templates sind aktiv, alle Dienste werden ausgeführt und alle Cookies gesetzt. Dasselbe gilt, wenn der Abschnitt `<AgreementCookies>` in der `shop.config` gar nicht vorhanden ist. Eine fehlende Konfiguration schaltet die Dienste also nicht ab, sondern frei.

Mit `Allow = test` prüfen Sie ein neues Einwilligungsbanner, ohne dass es für Besucher sichtbar wird. Außerhalb des Testmodus verhält sich der Shop dabei wie bei `no`.

## Ein vollständiges Einwilligungsbanner

Die Einzeltags sind weiter unten beschrieben, im Template treten sie aber immer gemeinsam auf. Das folgende Beispiel zeigt ein Banner mit Gruppierungen, das nur erscheint, solange eine Entscheidung aussteht.

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

   <form action="..." id="ws_agreement_form">

      <p>Bitte wählen Sie, welche Dienste ausgeführt werden dürfen:</p>

      <label>
         <input type="checkbox" value=""
                onclick="ws_agreement_updatecheckboxes();"
                class="~AC-ConsentAll_CheckboxClass~"
                ~AC-ConsentAll_CheckboxIsChecked~>
         Alles akzeptieren
      </label>

      ~DC-DynamicLoop1_set($AC-ConsentGroupList$)~
      {@DC-DynamicLoop1}
         {AC-ConsentGroup($DC-DynamicLoop1_data$)}

            <fieldset>
               <legend>
                  <input type="checkbox" value=""
                         onclick="ws_agreement_updatecheckboxes();"
                         class="~AC-ConsentGroup_CheckboxClass~"
                         ~AC-ConsentGroup_CheckboxIsChecked~>
                  ~AC-ConsentGroup_Name~
               </legend>

               <p>~AC-ConsentGroup_Descr~</p>

               {@AC-Entry($DC-DynamicLoop1_data$)}
                  <label>
                     <input type="checkbox" value=""
                            class="~AC-Entry_CheckboxClass~"
                            ~AC-Entry_CheckboxIsChecked~>
                     ~AC-Entry_Name~
                  </label>
                  <span>~AC-Entry_Descr~</span>
               {/@AC-Entry($DC-DynamicLoop1_data$)}
            </fieldset>

         {/AC-ConsentGroup($DC-DynamicLoop1_data$)}
      {/@DC-DynamicLoop1}

      <!-- Schaltfläche zum Speichern der Auswahl -->

   </form>

{/AC-AgreementNotMadeOrNeedsUpdate}
```

Der Umweg über `DC-DynamicLoop1` ist nötig, weil `AC-ConsentGroupList` nur eine kommaseparierte Liste der Gruppen-IDs liefert und kein Schleifen-Tag ist. Die dynamische Schleife zerlegt diese Liste, und `AC-ConsentGroup()` nimmt je Durchlauf eine ID entgegen.

Einen Dienst selbst klammern Sie dann an der Stelle ein, an der er eingebunden wird:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMadeForID(123)}
   <!-- Tracking-Code des Dienstes mit der ID 123 -->
{/AC-AgreementMadeForID(123)}
```

> [!WARNING]
>
> Diese Klammerung ist der eigentliche Zweck der ganzen Funktion. Ein Banner, das die Auswahl speichert, aber die Dienste ungeklammert lässt, lädt den Dienst trotzdem.

## OptIn und OptOut: wann ein Haken Zustimmung bedeutet

Jeder Dienst bekommt in der `shop.config` einen Typ. Der Typ entscheidet, wie ein gesetzter Haken zu lesen ist, und das ist bei einem der drei Typen genau andersherum als erwartet.

| Wert | Typ | Ein gesetzter Haken bedeutet |
| - | - | - |
| 0 | OptIn | Zustimmung |
| 1 | OptOutChecked | **Widerspruch** |
| 2 | OptOutUnchecked | Zustimmung |

Bei `OptOutChecked` ist die Checkbox also angehakt, solange der Besucher **nicht** zugestimmt hat, und der Haken verschwindet, sobald er zustimmt.

> [!WARNING]
>
> Beschriften Sie die Checkbox deshalb passend zum Typ. Steht bei einem `OptOutChecked`-Dienst "Ich stimme zu" neben einem vorab gesetzten Haken, bedeutet die Oberfläche das Gegenteil dessen, was der Shop speichert.

Ist für einen Dienst eine Vorbelegung der Checkbox konfiguriert und liegt für ihn noch kein Cookie vor, gewinnt die Vorbelegung. `AC-Entry_CheckboxIsChecked` zeigt dann den vorbelegten Zustand, unabhängig davon, ob eine Einwilligung vorliegt. Sobald der Besucher einmal entschieden hat, zählt nur noch seine Entscheidung.

## Zustand der Einwilligung

Diese Tags beziehen sich auf die Einwilligung als Ganzes und sind in allen Templates zulässig.

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `AC-AgreementMade` | – | ja | ja | – |
| `AC-AgreementMade_CookieName` | ja | – | – | – |
| `AC-AgreementMadeForID()` | – | ja | ja | – |
| `AC-AgreementNeedsUpdate` | – | ja | ja | – |
| `AC-AgreementNotMadeOrNeedsUpdate` | – | ja | ja | – |

### AC-AgreementMade

Der Bereich wird angezeigt, wenn der Shopbesucher eine Entscheidung zum Umgang mit seinen Daten getroffen hat, also den entsprechenden Button gedrückt bekommen und das Banner gesehen hat.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMade}
   Der Shopbesucher hat eine Willenserklärung abgegeben.
{/AC-AgreementMade}

{!AC-AgreementMade}
   Der Shopbesucher hat noch keine Willenserklärung abgegeben.
{/!AC-AgreementMade}
```

### AC-AgreementMade\_CookieName

Gibt den Namen des Cookies aus, in dem festgehalten ist, dass der Besucher eine Willenserklärung abgegeben hat.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Name des Cookies: ~AC-AgreementMade_CookieName~
```

Gebraucht wird das Tag vor allem für die Cookie-Übersicht in der Datenschutzerklärung. Dort steht der Name dann auch dann richtig, wenn er in der Konfiguration später geändert wird.

### AC-AgreementMadeForID()

Der Bereich wird angezeigt, wenn der Besucher der Datenverarbeitung durch den Dienst mit der übergebenen ID zugestimmt hat. Die ID stammt aus der Konfiguration des jeweiligen Dienstes.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMadeForID(123)}
   Einwilligung für den Dienst mit der ID 123 liegt vor.
{/AC-AgreementMadeForID(123)}

{!AC-AgreementMadeForID(123)}
   Einwilligung für den Dienst mit der ID 123 liegt nicht vor.
{/!AC-AgreementMadeForID(123)}
```

Mit diesem Tag klammern Sie Tracking-Codes, Zählpixel, JavaScripts und Container ein. Der Dienst wird dann nur im positiven Bereich ausgeführt.

Den negativen Bereich nutzen Sie für den Ersatzinhalt, beispielsweise einen Platzhalter anstelle einer eingebundenen Karte mit einem Hinweis, wie sich die Einwilligung nachholen lässt.

### AC-AgreementNeedsUpdate

Der Bereich wird angezeigt, wenn die Konfiguration der datenschutzrelevanten Dienste so geändert wurde, dass eine aktualisierte Einwilligung nötig ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementNeedsUpdate}
   Aktualisierung der Auswahl erforderlich.
{/AC-AgreementNeedsUpdate}
```

### AC-AgreementNotMadeOrNeedsUpdate

Der Bereich wird angezeigt, wenn noch nicht für alle Dienste eine Einwilligung vorliegt oder wenn eine Aktualisierung nötig ist. Das ist die übliche Klammerung um das gesamte Banner.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementNotMadeOrNeedsUpdate}
   <!-- Das Einwilligungsbanner -->
{/AC-AgreementNotMadeOrNeedsUpdate}
```

Dieses Tag fasst zwei Fälle zusammen, die Sie sonst einzeln abfragen müssten: die Erstentscheidung und die nachträgliche Änderung der Dienste. Für das Banner ist genau das die richtige Bedingung, denn in beiden Fällen muss der Besucher gefragt werden.

## Die einzelnen Dienste

`AC-Entry` ist zugleich Einzel-Tag, Bereichs-Tag und Schleifen-Tag. Als Einzel-Tag gibt es die Anzahl der konfigurierten Dienste aus, als Bereichs-Tag greift es, wenn mindestens ein Dienst konfiguriert ist, und als Schleife läuft es über alle Dienste. Alle übrigen `AC-Entry_`Tags beziehen sich auf den Dienst des aktuellen Schleifendurchlaufs.

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `AC-Entry()` | ja | ja | ja | ja |
| `AC-Entry_AgreementMade` | – | ja | ja | – |
| `AC-Entry_CheckboxClass` | ja | – | – | – |
| `AC-Entry_CheckboxIsChecked` | ja | ja | ja | – |
| `AC-Entry_ConsentGroupID` | ja | ja | ja | – |
| `AC-Entry_CookieName` | ja | – | – | – |
| `AC-Entry_Descr` | ja | ja | ja | – |
| `AC-Entry_ID` | ja | – | – | – |
| `AC-Entry_Name` | ja | ja | ja | – |
| `AC-Entry_TrackingFrameworkList` | ja | ja | ja | – |
| `AC-Entry_Type` | ja | – | – | – |
| `AC-Entry_TypeIsOptIn` | – | ja | ja | – |
| `AC-Entry_TypeIsOptOut` | – | ja | ja | – |

Zulässig sind sie in allen Templates. Die `AC-Entry_`Tags setzen allerdings voraus, dass gerade ein Dienst aktiv ist, sie gehören also in die Schleife `{@AC-Entry}`.

### AC-Entry()

Optional nimmt das Tag eine Gruppen-ID als Argument entgegen. Dann zählt und durchläuft es nur die Dienste dieser Gruppierung.

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

   Es sind ~AC-Entry~ Dienste konfiguriert.

   {@AC-Entry}
      Dienst ~AC-Entry_Name~:
      <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
      ~AC-Entry_Descr~
      Erlaubnis zur Verwendung: {AC-Entry_AgreementMade}ja{/AC-Entry_AgreementMade}{!AC-Entry_AgreementMade}nein{/!AC-Entry_AgreementMade}
      ID: ~AC-Entry_ID~
   {/@AC-Entry}

{/AC-Entry}

{!AC-Entry}
   Es wurde kein Dienst konfiguriert.
{/!AC-Entry}
```

Mit Gruppen-ID:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}

   In dieser Gruppierung sind ~AC-Entry(123)~ Dienste konfiguriert.

   {@AC-Entry(123)}
      ~AC-Entry_Name~:
      <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
      ~AC-Entry_Descr~
   {/@AC-Entry(123)}

{/AC-ConsentGroup(123)}
```

> [!WARNING]
>
> Das Argument gehört an das Tag selbst. `~AC-Entry~` gibt auch innerhalb einer `AC-ConsentGroup()`-Klammerung die Anzahl **aller** Dienste aus, nicht die der Gruppierung. Nur `~AC-Entry(123)~` zählt die Dienste dieser einen Gruppierung.

Ist die angegebene Gruppen-ID unbekannt, gibt das Einzel-Tag 0 aus, die Schleife läuft keinen Durchlauf und der Bereich bleibt ausgeblendet. Ein Tippfehler in der ID fällt im Template also nicht als Fehler auf, sondern nur durch eine leere Liste.

### AC-Entry\_AgreementMade

Der Bereich wird angezeigt, wenn der Besucher der Nutzung dieses Dienstes zugestimmt hat.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_AgreementMade}
      Einwilligung zur Nutzung des Dienstes liegt vor.
   {/AC-Entry_AgreementMade}

   {!AC-Entry_AgreementMade}
      Einwilligung zur Nutzung des Dienstes liegt nicht vor.
   {/!AC-Entry_AgreementMade}
{/@AC-Entry}
```

### AC-Entry\_CheckboxClass

Gibt die funktionalen Klassennamen aus, die der Checkbox des Dienstes zugewiesen sein müssen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   ~AC-Entry_Name~:
   <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
   ~AC-Entry_Descr~
{/@AC-Entry}
```

> [!WARNING]
>
> Ohne diese Klasse findet das mitgelieferte JavaScript die Checkbox nicht. Der Haken lässt sich dann zwar setzen, wird aber weder gespeichert noch von den übergeordneten Schaltern mitgeführt. Eigene Gestaltungsklassen schreiben Sie zusätzlich dazu, nicht anstelle.

### AC-Entry\_CheckboxIsChecked

Gibt `checked` aus, wenn die Checkbox angehakt sein soll. Das Tag steht direkt im `input`-Element, ohne Attributnamen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
```

Ob ein Haken Zustimmung oder Widerspruch bedeutet, hängt vom Typ des Dienstes ab. Siehe den Abschnitt zu OptIn und OptOut weiter oben.

### AC-Entry\_ConsentGroupID

Gibt die ID der Gruppierung aus, der der Dienst zugeordnet ist. Als Bereichs-Tag prüfen Sie damit, ob der Dienst überhaupt einer Gruppierung angehört.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_ConsentGroupID}
      Dieser Dienst gehört zur Gruppierung mit der ID ~AC-Entry_ConsentGroupID~.
   {/AC-Entry_ConsentGroupID}
{/@AC-Entry}
```

### AC-Entry\_CookieName

Gibt den Namen des Cookies aus, in dem die Einwilligung oder der Widerspruch zu diesem Dienst gespeichert wird.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Für ~AC-Entry_Name~ mit der ID ~AC-Entry_ID~ wird die Entscheidung
   im Cookie ~AC-Entry_CookieName~ gespeichert.
{/@AC-Entry}
```

Damit bauen Sie die Cookie-Tabelle der Datenschutzerklärung aus der Konfiguration auf, statt sie von Hand zu pflegen. Kommt ein Dienst dazu, steht er automatisch mit in der Tabelle.

### AC-Entry\_Descr

Gibt die Beschreibung des Dienstes aus. Als Bereichs-Tag greift es nur, wenn eine Beschreibung hinterlegt ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Name des Dienstes: ~AC-Entry_Name~
   ID: ~AC-Entry_ID~

   {AC-Entry_Descr}
      Beschreibung: ~AC-Entry_Descr~
   {/AC-Entry_Descr}

   {!AC-Entry_Descr}
      Keine Beschreibung hinterlegt.
   {/!AC-Entry_Descr}
{/@AC-Entry}
```

### AC-Entry\_ID

Gibt die ID des Dienstes aus. Es ist dieselbe ID, die Sie an `AC-AgreementMadeForID()` übergeben.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   ID: ~AC-Entry_ID~
{/@AC-Entry}
```

### AC-Entry\_Name

Gibt den Namen des Dienstes aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Dienst ~AC-Entry_Name~
{/@AC-Entry}
```

### AC-Entry\_TrackingFrameworkList

Gibt die Liste der Tracking-Frameworks aus, über die die Einwilligung zu diesem Dienst in der WEBSALE-App entgegengenommen werden kann.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TrackingFrameworkList}
      Frameworks: ~AC-Entry_TrackingFrameworkList~
   {/AC-Entry_TrackingFrameworkList}
{/@AC-Entry}
```

Für einen reinen Webshop ist dieses Tag ohne Bedeutung. Es wird nur gebraucht, wenn zusätzlich eine App im Einsatz ist.

### AC-Entry\_Type

Gibt den Typ des Dienstes als Zahl aus: 0 für OptIn, 1 für OptOutChecked, 2 für OptOutUnchecked.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Type: ~AC-Entry_Type~
{/@AC-Entry}
```

Für die Darstellung im Banner sind `AC-Entry_TypeIsOptIn` und `AC-Entry_TypeIsOptOut` die bessere Wahl. Die Zahl brauchen Sie vor allem zur Fehlersuche.

### AC-Entry\_TypeIsOptIn

Der Bereich wird angezeigt, wenn der Dienst als OptIn konfiguriert ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TypeIsOptIn}
      Dienst ist als OptIn konfiguriert.
   {/AC-Entry_TypeIsOptIn}
{/@AC-Entry}
```

### AC-Entry\_TypeIsOptOut

Der Bereich wird angezeigt, wenn der Dienst als OptOut konfiguriert ist, also als OptOutChecked oder als OptOutUnchecked.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TypeIsOptOut}
      Dienst ist als OptOut konfiguriert.
   {/AC-Entry_TypeIsOptOut}
{/@AC-Entry}
```

Das Tag unterscheidet die beiden OptOut-Varianten nicht. Für eine Beschriftung, die vom Anfangszustand der Checkbox abhängt, werten Sie zusätzlich `AC-Entry_Type` aus.

## Die Gruppierungen

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `AC-ConsentGroupList` | ja | – | – | – |
| `AC-ConsentGroup()` | – | ja | – | – |
| `AC-ConsentGroup_CheckboxClass` | ja | – | – | – |
| `AC-ConsentGroup_CheckboxIsChecked` | ja | ja | ja | – |
| `AC-ConsentGroup_Descr` | ja | ja | ja | – |
| `AC-ConsentGroup_FullAgreementMade` | – | ja | ja | – |
| `AC-ConsentGroup_ID` | ja | – | – | – |
| `AC-ConsentGroup_Name` | ja | ja | ja | – |

Zulässig sind sie in allen Templates. Bis auf `AC-ConsentGroupList` setzen sie voraus, dass gerade eine Gruppierung geklammert ist.

### AC-ConsentGroupList

Gibt alle Gruppen-IDs als kommaseparierte Liste aus, in der Reihenfolge der Konfiguration.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_set($AC-ConsentGroupList$)~
{@DC-DynamicLoop1}
   {AC-ConsentGroup($DC-DynamicLoop1_data$)}
      <!-- Darstellung der Gruppierung -->
   {/AC-ConsentGroup($DC-DynamicLoop1_data$)}
{/@DC-DynamicLoop1}
```

Das Tag ist selbst keine Schleife. Sie brauchen deshalb immer eine dynamische Schleife, die die Liste zerlegt und jede ID einzeln an `AC-ConsentGroup()` weiterreicht.

### AC-ConsentGroup()

Klammert die Gruppierung, deren ID als Argument übergeben wird. Innerhalb dieser Klammerung stehen alle übrigen `AC-ConsentGroup_`Tags zur Verfügung.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   Name der Gruppierung: ~AC-ConsentGroup_Name~
   Beschreibung: ~AC-ConsentGroup_Descr~
{/AC-ConsentGroup(123)}
```

> [!WARNING]
>
> Zwei `AC-ConsentGroup()`-Klammerungen dürfen sich nicht überlappen oder ineinander verschachteln. Der Shop wertet immer nur eine Gruppierung gleichzeitig aus und meldet eine solche Verschränkung als Fehler, statt sie stillschweigend falsch darzustellen.

Ein negativer Bereich ist für dieses Tag nicht vorgesehen. Wenn Sie prüfen wollen, ob es überhaupt Gruppierungen gibt, werten Sie `AC-ConsentGroupList` aus.

### AC-ConsentGroup\_CheckboxClass

Gibt die funktionalen Klassennamen für die Checkbox der Gruppierung aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   <input type="checkbox" value=""
          onclick="ws_agreement_updatecheckboxes();"
          class="~AC-ConsentGroup_CheckboxClass~"
          ~AC-ConsentGroup_CheckboxIsChecked~>
{/AC-ConsentGroup(123)}
```

Der Aufruf von `ws_agreement_updatecheckboxes()` gehört dazu. Er führt die Haken der einzelnen Dienste und den Schalter "Alles akzeptieren" nach, wenn der Besucher die Gruppierung als Ganzes umschaltet.

### AC-ConsentGroup\_CheckboxIsChecked

Gibt `checked` aus, wenn die Checkbox der Gruppierung angehakt sein soll, also wenn für alle Dienste der Gruppierung eine Zustimmung vorliegt oder als vorbelegt gilt.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<input type="checkbox" value="" class="~AC-ConsentGroup_CheckboxClass~" ~AC-ConsentGroup_CheckboxIsChecked~>
```

Dieses Tag berücksichtigt auch die Vorbelegung der einzelnen Checkboxen, `AC-ConsentGroup_FullAgreementMade` dagegen nicht. Solange der Besucher noch nicht entschieden hat, kann die Gruppen-Checkbox also angehakt sein, obwohl noch keine Einwilligung vorliegt.

### AC-ConsentGroup\_Descr

Gibt die Beschreibung der Gruppierung aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   ~AC-ConsentGroup_Descr~
{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_FullAgreementMade

Der Bereich wird angezeigt, wenn der Besucher der Nutzung aller Dienste dieser Gruppierung zugestimmt hat.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}

   {AC-ConsentGroup_FullAgreementMade}
      Einwilligung für alle Dienste dieser Gruppierung liegt vor.
   {/AC-ConsentGroup_FullAgreementMade}

   {!AC-ConsentGroup_FullAgreementMade}
      Einwilligung für alle Dienste dieser Gruppierung liegt nicht vor.
   {/!AC-ConsentGroup_FullAgreementMade}

{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_ID

Gibt die ID der Gruppierung aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   ID der Gruppierung: ~AC-ConsentGroup_ID~
{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_Name

Gibt den Namen der Gruppierung aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   Name der Gruppierung: ~AC-ConsentGroup_Name~
{/AC-ConsentGroup(123)}
```

## Alle Dienste zusammen

Diese drei Tags gehören zum Schalter "Alles akzeptieren". Sie brauchen keine Klammerung und sind in allen Templates zulässig.

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `AC-ConsentAll_CheckboxClass` | ja | – | – | – |
| `AC-ConsentAll_CheckboxIsChecked` | ja | ja | ja | – |
| `AC-ConsentAll_FullAgreementMade` | – | ja | ja | – |

### AC-ConsentAll\_CheckboxClass

Gibt die funktionalen Klassennamen für die Checkbox aus, die alle Gruppierungen und damit alle Dienste umschaltet.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Alles akzeptieren:
<input type="checkbox" value=""
       onclick="ws_agreement_updatecheckboxes();"
       class="~AC-ConsentAll_CheckboxClass~"
       ~AC-ConsentAll_CheckboxIsChecked~>
```

### AC-ConsentAll\_CheckboxIsChecked

Gibt `checked` aus, wenn die Checkbox angehakt sein soll, also wenn für alle Dienste eine Zustimmung vorliegt oder als vorbelegt gilt.

### AC-ConsentAll\_FullAgreementMade

Der Bereich wird angezeigt, wenn der Besucher der Nutzung aller Gruppierungen und damit aller Dienste zugestimmt hat.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentAll_FullAgreementMade}
   Einwilligung für alle Dienste liegt vor.
{/AC-ConsentAll_FullAgreementMade}

{!AC-ConsentAll_FullAgreementMade}
   Einwilligung für alle Dienste liegt nicht vor.
{/!AC-ConsentAll_FullAgreementMade}
```

Damit blenden Sie beispielsweise einen Link "Datenschutzeinstellungen ändern" nur denen ein, die nicht ohnehin allem zugestimmt haben.

## Verwandte Themen

* Wegweiser: Einwilligung zur Datenverarbeitung
* Referenz: [Abschnitt AgreementCookies](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/externe-dienste-und-schnittstellen.md#agreementcookies)
* Referenz: [DC-DynamicLoop1…9](https://dokumentation.websale.de/v8s/referenz/tags/dc/parameter.md)


## Related topics

- [Google reCAPTCHA erst nach Einwilligung laden](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-recaptcha-mit-einwilligung.md)
- [Beispiele für Asynchronous Server Side Events](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-asse-beispiele.md)
- [Materialien Tracking-Schnittstelle](https://dokumentation.websale.de/v8s/materialien/materialien-tracking-schnittstelle.md)
- [Materialien Einwilligung zur Datenverarbeitung](https://dokumentation.websale.de/v8s/materialien/materialien-einwilligung-zur-datenverarbeitung.md)
- [Einwilligung zur Datenverarbeitung (Cookies)](https://dokumentation.websale.de/v8s/einstellungen/einwilligung-zur-datenverarbeitung-cookies.md)


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