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 |