> For the complete documentation index, see [llms.txt](https://docs.hubyte.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hubyte.de/artikel-konfigurator/ausgabe-bestellung-belege/email-template.md).

# E-Mail-Template & Variablen

Die vom Kunden ausgefüllten Felder werden in der **Payload jeder Bestellposition** gespeichert und stehen damit in den E-Mail-Vorlagen von Shopware zur Verfügung. So können Sie die Zusatzfelder z. B. in der **Bestellbestätigung** ausgeben.

E-Mail-Vorlagen pflegen Sie in der Administration unter **Einstellungen > E-Mail-Templates**. Innerhalb der Schleife `{% for lineItem in order.lineItems %}` haben Sie Zugriff auf die unten beschriebenen Variablen.

## Verfügbare Variablen je Bestellposition

Das Plugin legt – je nach Konfiguration – bis zu drei zusätzliche Einträge in `lineItem.payload` ab:

| Variable                                  | Inhalt                                                                                                       |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `lineItem.payload.huebert_attributes`     | Alle ausgefüllten Felder **ohne** separaten Preis (Text, Zahl, Datum, Auswahl, Farbe, Datei …).              |
| `lineItem.payload.attributes_with_prices` | Felder/Optionen **mit Preisaufschlag** (nur wenn „Preise" aktiv sind).                                       |
| `lineItem.payload.dependencies`           | Über eine [Abhängigkeit (Checkbox)](/artikel-konfigurator/abhaengigkeiten.md) bestätigte Felder inkl. Preis. |

### Aufbau von `huebert_attributes`

`huebert_attributes` ist eine Liste. Jeder Eintrag ist eine Sammlung von Feldern, die folgende Eigenschaften besitzen:

| Eigenschaft       | Bedeutung                                                                                                                                           |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `attribute.name`  | Beschriftung des Feldes (Feldname).                                                                                                                 |
| `attribute.value` | Eingegebener bzw. gewählter Wert. Bei einem **Medienupload** ist dies die Datei-URL, bei der **Farbauswahl** ein Objekt mit `colorName`/`hexColor`. |
| `attribute.order` | Reihenfolge des Feldes (zum Sortieren).                                                                                                             |
| `attribute.type`  | Feldtyp (z. B. `text`, `number`, `dropdown`, `single-select`, `multi-select`).                                                                      |
| `quantity`        | Spezieller Schlüssel mit der Menge (nur bei getrennter Mengenführung relevant).                                                                     |

### Aufbau von `attributes_with_prices`

Eine Map nach dem Schema `Optionsname => { Wertname => { price, quantity } }`:

| Eigenschaft      | Bedeutung                            |
| ---------------- | ------------------------------------ |
| `array.price`    | Preisaufschlag der gewählten Option. |
| `array.quantity` | Menge zur Option.                    |

## Vorlage: Felder in der E-Mail ausgeben

Fügen Sie den folgenden Block **innerhalb** der Positionsschleife Ihrer E-Mail-Vorlage ein (also zwischen `{% for lineItem in order.lineItems %}` und dem zugehörigen `{% endfor %}`):

```twig
{% set currencyIsoCode = order.currency.isoCode %}

{# 1) Einfache Felder ohne Preis #}
{% if lineItem.payload.huebert_attributes is defined and lineItem.payload.huebert_attributes %}
    {% for attributesList in lineItem.payload.huebert_attributes %}
        {% for key, attribute in attributesList|sort((a, b) => a.order <=> b.order) %}
            {% if key != 'quantity' and attribute.name is defined and attribute.value is defined %}
                <div>
                    <strong>{{ attribute.name|replace({'_': ' '}) }}:</strong>
                    {% if attribute.value.colorName is defined %}
                        {{ attribute.value.colorName }}
                    {% elseif 'http://' in attribute.value or 'https://' in attribute.value %}
                        <a href="{{ attribute.value }}">{{ attribute.value }}</a>
                    {% else %}
                        {{ attribute.value }}
                    {% endif %}
                </div>
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endif %}

{# 2) Optionen mit Preisaufschlag #}
{% if lineItem.payload.attributes_with_prices is defined and lineItem.payload.attributes_with_prices %}
    {% for optionName, options in lineItem.payload.attributes_with_prices %}
        {% for name, array in options %}
            {% set price = array.price|number_format(2)|floatval * array.quantity %}
            <div>
                <strong>{{ optionName }}:</strong> {{ name }}
                ({{ array.quantity }} × {{ array.price|number_format(2)|floatval|currency(currencyIsoCode) }}
                = {{ price|currency(currencyIsoCode) }})
            </div>
        {% endfor %}
    {% endfor %}
{% endif %}
```

## Beispiele

### Nur ein einzelnes Feld ausgeben

Wenn Sie gezielt **ein** Feld anhand seines Namens ausgeben möchten:

```twig
{% if lineItem.payload.huebert_attributes is defined %}
    {% for attributesList in lineItem.payload.huebert_attributes %}
        {% for key, attribute in attributesList %}
            {% if attribute.name == 'Gravurtext' %}
                Gravur: {{ attribute.value }}<br>
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endif %}
```

### Medienupload als Link ausgeben

```twig
{% for attributesList in lineItem.payload.huebert_attributes %}
    {% for key, attribute in attributesList %}
        {% if attribute.value is not null and ('http://' in attribute.value or 'https://' in attribute.value) %}
            {{ attribute.name }}: <a href="{{ attribute.value }}">Datei herunterladen</a><br>
        {% endif %}
    {% endfor %}
{% endfor %}
```

### Tabellenzeile in der Positionsübersicht

Innerhalb einer bestehenden Positions-Tabelle (`<table>`) können Sie pro Feld eine eigene Zeile ausgeben:

```twig
{% if lineItem.payload.huebert_attributes is defined %}
    {% for attributesList in lineItem.payload.huebert_attributes %}
        {% for key, attribute in attributesList|sort((a, b) => a.order <=> b.order) %}
            {% if key != 'quantity' and attribute.name is defined %}
                <tr>
                    <td></td>
                    <td><small><strong>{{ attribute.name|replace({'_': ' '}) }}:</strong> {{ attribute.value }}</small></td>
                    <td></td><td></td><td></td>
                </tr>
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endif %}
```

> **Hinweis:** Mit dem Plugin werden bereits angepasste Standard-Mailtexte mitgeliefert. Wenn Sie eine eigene Vorlage verwenden, kopieren Sie die obigen Blöcke einfach in Ihr bestehendes Template. Achten Sie darauf, dass `currencyIsoCode` definiert ist (`{% set currencyIsoCode = order.currency.isoCode %}`), bevor Sie `|currency(...)` verwenden.

## Zusätzliches Feld für Shopbetreiber

Unabhängig von den Kundeneingaben kann der Shopbetreiber pro Artikel eine eigene Angabe in die Bestellbestätigungs-Mail einfließen lassen (Reiter **Allgemein** im Artikel, Karte **Hubyte Artikel Konfigurator**). Das zugehörige Label legen Sie in der [Plugin-Konfiguration](/artikel-konfigurator/plugin-konfiguration.md) unter `konfiguratorAdminLabel` fest. Mehr dazu unter [Ausgabe in Bestellung & Belegen](/artikel-konfigurator/ausgabe-bestellung-belege.md).
