Formulare

Formulare definieren

Damit ein Formular erzeugt werden kann, benötigt es eine Klasse, die im Modul unter /form angelegt wird. Die Ordnerstruktur wird hier durch die Namespaces definiert, es wird empfohlen Formulare für den Adminbereich unter /form/admin abzulegen. Formulare für das Frontend sollten unter /form/frontend abgespeichert werden. Die Namespaces lauten dann z.B. Firmenkürzel\Oxid\Formularname\Form\Admin\Formularname. Dabei entspricht der Part Firmenkürzel\Oxid\Formularname dem Prefix, welches in der composer.json angegeben wird und Form\Admin\Formularname gibt den Pfad zur Datei Formularname.php an.

Die Klasse muss zwingend das Interface Sioweb\Lib\Formgenerator\Core\FormInterface implementieren, da die Formularbibliothek diese Klasse ansonsten nicht akzeptiert. Sollte die Klasse sogenannte Subpaletten enthalten, muss die Klasse zusätzlich das Interface Sioweb\Lib\Formgenerator\Core\SubpaletteInterface implementieren.

Formular optionen

FormKey Typ Beispiel-Wert
formname string ‘myform’
table string ‘oxtablename’
fieldname string ‘editval[[{ $TABLE }]__[{ $FIELDNAME }]]’
palettes array []
fields array []

$TABLE & $FIELDNAME

Das Framework unter dem FormBuilder, akzeptiert einfache Variablen. Alle oben genannten Optionen, können in allen Elementen verwendet werden.

Subpaletten

Diese Bezeichnung, kommt aus der Contao-Welt. Die Backendformulare werden alle via DCA (Data Container Array) generiert. Einige Eingabefelder, meist einzelne Checkboxen, können bei aktivierung sogenannte Subpaletten laden. Diese definieren weiter Felder, die zum Wohle der Benutzbarkeit und Übersichtlichkeit erst angezeigt werden, wenn dies erforderlich ist.

Beispielsweise werden Eingabefelder wie Empfänger und Betreff erst benötigt, wenn unten die Checkbox oxsendform angehakt wird.

Subpaletten, werden als DIV-Container unter dem Kontrollfeld dargestellt. Ein Javascript fügt dem HTML-Container dann eine CSS-Klasse hinzu, welche den Container einblendet.

Beispiel (Checkbox)

[
    'oxsendform' => ['oxreceiver', 'oxsubject', 'oxcontent', 'oxconfirm'],
    'oxconfirm' => ['oxreceiver_confirm', 'oxsubject_confirm', 'oxcontent_confirm'],
]

Beispiel (Select)

Select-Felder können nicht einfach nur nach “Ist gesetzt” geprüft werden, da jede Option einen eigenen Wert besitzt. Daher werden die Subpaletten-Namen aus Feldname und den möglichen Werten aus dem Select-Feld zusammengesetzt. Als Beispiel wird das Feld oxvalidation mit den Werten email und nummeric verwendet:

[
    'oxvalidation_email' => ['oxconfirmfield']
]

Der Wert numeric benötigt zur Zeit keine weiteren Subpaletten-Felder, daher wird dieser nicht angegeben. Der Wert email hingegen kann verwendet werden, um dieses Feld als Absender-E-Mail-Adresse zu verwenden. Ist also oxconfirmfield aktiviert und der Besucher tippt eine Valide E-Mail-Adresse in dieses Feld, wird diese Adresse für die Bestätigungs-E-Mail verwendet.

Paletten

Paletten definieren welche Eingabefelder ausgegeben werden sollen. Die Eingabefelder werden anhand der Reihenfolge in den Paletten sortiert.

Ein Beispiel könnte wie folgt aussehen:

[
    'default' => [
        'action' => [
            'fields' => ['oxsendform'],
        ],
        'default' => [
            'class' => 'long',
            'fields' => ['applyFields', 'oxtitle', 'oxhtmltemplate', 'oxaction'],
        ],
        'config' => [
            'class' => 'long',
            'fields' => ['oxcssclass'],
        ],
        'publish' => [
            'class' => 'long',
            'fields' => ['oxactive', 'oxactivefrom', 'oxactiveto'],
        ],
        'submit' => [
            'fields' => ['submit'],
        ],
    ],
]

Dieses Beispiel erzeugt eine Palette, welche den Namen default haben muss. Es werden fünf Fieldsets generiert.

Eingabefelder definieren

Jedes Eingabefeld benötigt zwingend die Angabe, welchen Typ es entspricht. Als Eingabetypen wird eine der folgenden Optionen erwartet:

  • text
  • select
  • checkbox
  • radio
  • textarea
  • submit
  • button

Jeder Typ besitzt eine Reihe Attribute die zwingend erforderlich sind. Einige davon, werden durch die Formgenerator-Bibliothek automatisch ergänzt. Wird z.B. ein Feld mit dem Typ text und der Validierung email konfiguriert, erzeugt die Bibliothek den Code wie folgt:

<input type="email" name="editval[oxtablename__fieldname">

Attribute

Jedes Attribute, welches ein HTML-Eingabefeld haben kann, kann per Array angegeben werden.

Attribute Beispiel-Wert Beschreibung
type ‘text’ Definiert, wie das Feld gerendert werden soll und wie Standardattribute automatisch behandelt werden sollen.
required true Dieses Feld wird ein Pflichtfeld und das Label bekommt ein Asterisk-Zeichen angehängt.
submitOnChange true Sobald onchange ausgelöst wird, sendet sich das Formular selbst ab
valueColumn oxtype Gibt den Namen in der Tabelle an, welche anstelle des “value” Attributes verwendet werden soll.
options [eins, zwei, drei] Optionen für Checkboxes, Selects und Radiobuttons
attributes [] Feld für Data-Attribute und Javascripte