{% extends 'admin/shell.html.twig' %} {% set nav = 'forms' %} {# Die Vorschau zeichnet den Absendeknopf mit dem Standardbutton der Website - dafuer braucht die Seite dessen Stylesheet, genau wie die Designseite. #} {% block styles %}{% endblock %} {% block scripts %}{% endblock %} {% set editing = editing|default(false) %} {% block title %}{{ editing ? (current ? current.name : 'Neues Formular') ~ ' · ' : '' }}Formulare{% endblock %} {% block heading %}{{ editing ? (current ? current.name : 'Neues Formular') : 'Formulare' }}{% endblock %} {% block lead %}{% if editing %}← Alle Formulare{% else %}Felder, Empfänger und Aussehen deiner Formulare. Auf einer Seite setzt du sie mit dem Baustein „Formular“ ein.{% endif %}{% endblock %} {% block actions %}{% if not editing %}Neues Formular{% endif %}{% endblock %} {# Eine Feldkarte. Der Index steht in den Feldnamen; die Vorlage fuer neue Felder traegt an seiner Stelle den Platzhalter __n__, den das Skript beim Einfuegen ersetzt. #} {% macro field(f, n, row, types, languages = [], translations = {}) %} {% set id = 'f' ~ f ~ '-' ~ n %}
  • {# Eine Zeile je Feld: Beschriftung, Typ, Pflicht. Alles Weitere steht in den Details, die das Skript zuklappt - ohne Skript ist die Karte offen und vollständig bedienbar. #}

    Steht in der E-Mail vor der Antwort.

    Durch Komma trennen, mindestens zwei.

    Mit Bild wird die Auswahl zu anklickbaren Karten. Ohne Skript: je Zeile Option = Kennung.

    Technischer Name eines Auswahlfeldes weiter oben, Werte durch Komma. Leer: das Feld gilt immer.

    {# Je weitere Sprache, was Besucher lesen (ADR 111). Leer heißt: wie in der Hauptsprache. #} {% for sprache in languages %} {% set tr = translations[sprache.code].fields[row.name]|default({}) %}
    {{ sprache.name }}{% if tr.label|default('') %} · {{ tr.label }}{% endif %}

    Nur bei Auswahlfeldern: in derselben Reihenfolge, durch Komma.

    {% endfor %}
  • {% endmacro %} {% block content %} {% import _self as karte %} {% if editing %}
    {% for form in [current] %} {% set new = form is null %} {% set f = loop.index %} {% set rows = new ? [] : form.fields %} {% set settings = new ? {} : form.settings %} {% if new %}
    {% else %}
    {{ form.fields|length }} {{ form.fields|length == 1 ? 'Feld' : 'Felder' }} · an {{ settings.recipient|default('–') }} · Adresse {{ form.slug }}{% for sprache in languages %}{% if settings.translations[sprache.code]|default(null) %} · {{ sprache.code|upper }}{% endif %}{% endfor %}
    {% endif %}
    {% if new %} {# Die Zusammenfassung des Details ist keine Ueberschrift; ohne diese springt die Gliederung von der Seitenueberschrift direkt zu den Abschnittstiteln. #}

    Neues Formular

    {% endif %}

    Zustellung

    {{ new ? '' : 'an ' ~ settings.recipient|default('') ~ ' · Betreff „' ~ settings.subject|default('') ~ '“' }}
    {% if new %}

    Kurzname des Formulars, etwa kontakt. Kleinbuchstaben, Ziffern, Bindestrich. Im Editor wird das Formular dann aus einer Liste gewählt.

    {% endif %}

    Leer: die Empfängeradresse. Am besten eine Adresse der eigenen Domain.

    Technischer Name eines E-Mail-Feldes. Dann lässt sich direkt antworten.

    Nur bei Formularen mit Schritten.

    Felder

      {% for row in rows %}{{ karte.field(f, loop.index0, row, types, languages, settings.translations|default({})) }}{% endfor %} {{ karte.field(f, rows|length, {name: '', type: 'text', label: '', required: false, help: '', options: []}, types, languages) }}

    Hilfetext, Optionen, Bedingungen und Übersetzungen stehen unter „Details“. Ein „Neuer Schritt“ beginnt einen Abschnitt; ein Feld ohne Beschriftung wird nicht gespeichert.

    Aussehen

    Button „{{ settings.buttonLabel|default('Absenden') }}“
    {% for key, label in {fieldBorderColor: 'Rahmen der Felder', fieldBackgroundColor: 'Hintergrund der Felder', buttonColor: 'Button', buttonInk: 'Buttonschrift'} %}
    {% endfor %}

    Leer heißt: wie die Website. Form und Größe des Buttons kommen aus dem Design.

    {% for sprache in languages %} {% set tr = settings.translations[sprache.code]|default({}) %}

    {{ sprache.name }}

    {{ tr ? (tr.fields|default({})|length ~ ' von ' ~ rows|length ~ ' Feldern übersetzt') : 'noch nicht übersetzt' }}

    Button und Meldung auf {{ sprache.name }}; die Felder übersetzt du unter „Details“ am Feld. Die E-Mail an dich bleibt deutsch.

    {% endfor %}
    {# Die Vorschau: dieselben Felder, dieselben Farben, der Standardbutton der Website. Ohne Skript steht sie mit den gespeicherten Feldern da; mit Skript folgt sie jeder Eingabe. #}
    {% if not new %}Änderungen gelten sofort auf jeder Seite, die dieses Formular zeigt.{% endif %}
    {% endfor %}
    {% else %} {# Die Übersicht: eine Zeile je Formular, ohne Editor und ohne Vorschau. #} {% if forms is empty %}

    Noch kein Formular.

    Lege ein Formular an und setze es mit dem Baustein „Formular“ auf eine Seite.

    Neues Formular

    {% else %}
    {% for form in forms %}

    {{ form.name }}

    {{ form.fields|length }} {{ form.fields|length == 1 ? 'Feld' : 'Felder' }} · an {{ form.settings.recipient|default('–') }} · Adresse {{ form.slug }}{% for sprache in languages %}{% if form.settings.translations[sprache.code]|default(null) %} · {{ sprache.code|upper }} übersetzt{% endif %}{% endfor %}

    {{ counts[form.id]|default(0) }} {{ counts[form.id]|default(0) == 1 ? 'Einsendung' : 'Einsendungen' }} Bearbeiten
    {% endfor %}
    {% endif %}

    Einsendungen {{ submissions.total }}

    Neueste zuerst.
    {% if submissions.items is empty %}

    Noch keine Einsendungen.

    Hier erscheinen eingegangene Nachrichten, auch wenn der E-Mail-Versand fehlschlägt.

    {% else %}
    {% for entry in submissions.items %}

    {{ entry.form }}

    {{ entry.createdAt|date('d.m.Y H:i') }} UTC{% if entry.consentAt %} · Einwilligung {{ entry.consentAt|date('d.m.Y H:i') }}{% endif %}

    {% for key, value in entry.data %}
    {{ key }}
    {{ value }}
    {% endfor %}
    {{ entry.delivered ? 'Versendet' : 'Nicht versendet' }}
    {% endfor %}
    {% endif %} {% include 'admin/pager.html.twig' with {result: submissions, route: 'admin_forms', label: 'Seiten der Einsendungen'} only %} {% endif %}

    KantSites · Arbeitsstand

    {% endblock %}