Feldtypen-Referenz

Vollständige Referenz aller verfügbaren Feldtypen, Optionen und bedingter Logik.


Jedes Feld im schema.fields-Array hat folgende Grundstruktur:

{
  "id": "f1",
  "type": "text",
  "key": "vorname",
  "label": "Vorname"
}
EigenschaftTypPflichtBeschreibung
idstringJaEindeutige Feld-ID (frei wählbar)
typestringJaFeldtyp (siehe unten)
keystringJaSchlüssel unter dem der Wert gespeichert wird
labelstringJaAnzeigename im Formular

Eingabefelder

Eingabefelder liefern Werte vom Nutzer.

TypBeschreibung
textEinzeiliges Textfeld
emailE-Mail-Adresse (mit Validierung)
telTelefonnummer
urlURL / Webadresse (mit Validierung)
textareaMehrzeiliges Textfeld
numberZahleneingabe
dateDatumswähler
timeZeitwähler
checkboxEinzelne Checkbox (Ja/Nein)
selectDropdown-Auswahl (benötigt options)
radioRadio-Buttons (benötigt options)
fileDatei-Upload / Foto mit Kamera

Darstellungselemente

Darstellungselemente liefern keine Werte – sie dienen nur der visuellen Struktur.

TypBeschreibung
headingÜberschrift / Abschnittstitel
dividerHorizontale Trennlinie
static_textStatischer Text / Hinweis (nutzt content-Eigenschaft)

Gemeinsame Optionen

Diese Optionen stehen für alle Eingabefelder zur Verfügung:

EigenschaftTypPflichtBeschreibung
idstringJaEindeutige Feld-ID
typestringJaFeldtyp
keystringJaSchlüssel für den Wert
labelstringJaAnzeigename
requiredbooleanNeinPflichtfeld? (Standard: false)
placeholderstring | nullNeinPlatzhaltertext im leeren Feld
descriptionstring | nullNeinHilfetext unter dem Feld
rulesRule[]NeinBedingte Logik (siehe unten)

Spezielle Optionen je Typ

select / radio

Benötigen ein options-Array:

"options": [
  { "label": "Option A", "value": "a" },
  { "label": "Option B", "value": "b" },
  { "label": "Option C", "value": "c" }
]

static_text

Nutzt die content-Eigenschaft:

"content": "Bitte füllen Sie das Formular vollständig aus."

file

Datei-Upload mit eigenen Optionen:

EigenschaftTypStandardBeschreibung
acceptstringalleErlaubte Dateitypen, z.B. "image/*,.pdf,.doc,.docx"
maxSizeMbnumber10Max. Größe pro Datei in MB (Max 50)
maxFilesnumber5Max. Anzahl Dateien (Max 20)

Bedingte Logik (Rules)

Felder können abhängig von anderen Feldern ein-/ausgeblendet oder pflicht-/optional gemacht werden.

"rules": [
  {
    "id": "r1",
    "effect": "show",
    "when": {
      "fieldKey": "kontaktart",
      "op": "equals",
      "value": "telefon"
    }
  }
]

Verfügbare Effects

EffectBeschreibung
showFeld anzeigen wenn Bedingung zutrifft
hideFeld ausblenden wenn Bedingung zutrifft
requireFeld wird Pflicht wenn Bedingung zutrifft
optionalFeld wird optional wenn Bedingung zutrifft

Verfügbare Operatoren

OperatorBeschreibung
equalsWert ist gleich value
not_equalsWert ist ungleich value
is_emptyFeld ist leer (value wird ignoriert)
is_not_emptyFeld ist nicht leer

Vollständiges Beispiel

Ein komplettes Schema mit verschiedenen Feldtypen, Optionen und bedingter Logik:

{
  "version": 1,
  "fields": [
    {
      "id": "h1",
      "type": "heading",
      "key": "ueberschrift",
      "label": "Kontaktformular"
    },
    {
      "id": "s1",
      "type": "static_text",
      "key": "hinweis",
      "label": "Hinweis",
      "content": "Bitte füllen Sie alle Pflichtfelder aus."
    },
    {
      "id": "f1",
      "type": "text",
      "key": "vorname",
      "label": "Vorname",
      "required": true,
      "placeholder": "Max"
    },
    {
      "id": "f2",
      "type": "text",
      "key": "nachname",
      "label": "Nachname",
      "required": true
    },
    {
      "id": "f3",
      "type": "email",
      "key": "email",
      "label": "E-Mail-Adresse",
      "required": true,
      "placeholder": "max@beispiel.de"
    },
    {
      "id": "f4",
      "type": "tel",
      "key": "telefon",
      "label": "Telefonnummer",
      "placeholder": "+49 170 1234567"
    },
    {
      "id": "d1",
      "type": "divider",
      "key": "trennlinie",
      "label": ""
    },
    {
      "id": "f5",
      "type": "select",
      "key": "anliegen",
      "label": "Ihr Anliegen",
      "required": true,
      "options": [
        { "label": "Allgemeine Anfrage", "value": "allgemein" },
        { "label": "Beschwerde", "value": "beschwerde" },
        { "label": "Lob", "value": "lob" }
      ]
    },
    {
      "id": "f6",
      "type": "textarea",
      "key": "nachricht",
      "label": "Ihre Nachricht",
      "required": true,
      "placeholder": "Beschreiben Sie Ihr Anliegen...",
      "description": "Mindestens 10 Zeichen"
    },
    {
      "id": "f7",
      "type": "radio",
      "key": "kontaktweg",
      "label": "Bevorzugter Kontaktweg",
      "options": [
        { "label": "E-Mail", "value": "email" },
        { "label": "Telefon", "value": "telefon" }
      ]
    },
    {
      "id": "f8",
      "type": "date",
      "key": "wunschtermin",
      "label": "Wunschtermin",
      "rules": [
        {
          "id": "r1",
          "effect": "show",
          "when": {
            "fieldKey": "kontaktweg",
            "op": "equals",
            "value": "telefon"
          }
        }
      ]
    },
    {
      "id": "f9",
      "type": "file",
      "key": "anhang",
      "label": "Anhänge",
      "description": "Bilder oder PDFs hochladen",
      "accept": "image/*,.pdf",
      "maxSizeMb": 10,
      "maxFiles": 5
    },
    {
      "id": "f10",
      "type": "checkbox",
      "key": "datenschutz",
      "label": "Ich stimme der Datenschutzerklärung zu",
      "required": true
    }
  ]
}