Artikel
von Patrick Froch

Contao: Formulare erstellen und verarbeiten

Oftmals ist es in einer Erweiterung erforderlich Daten der Nutzer entgegenzunehmen. Hierzu bieten sich Formulare an. Wie man einfache Formulare erzeugt und verarbeitet soll hier erklärt werden. Als Beispiel wird ein Inhaltselement erstellt, dies wird das Formular ausgeben und die Eingaben einfach verarbeiten. Es wäre aber genauso gut möglich, die Werte des Formulars zu speichern oder per Mail zu versenden.

Vorbereitungen

Den grundlegenden Aufbau eines Inahltselements habe ich bereits im Artikel "Contao: Ein eigenes Inhaltselement" beschrieben. Als erstes legen wir wie immer einen Ordner unter system/modules/ an, der unsere Erweiterung aufnimmt. Ich nenne ihn easyform, der Name ist aber frei wählbar.

Einstellungen

Nun gehts wie immer an die Einstellungen im Ordner system/modules/easyform/config/. Wir legen die Datei config.php und autoload.php an:

Damit haben wir in Zeile 14 den Namen und den Pfad zur Klasse, die die Verarbeitung unseres Inhaltselements durchführt, bereits festgelegt. Anlegen werden wir diese Klasse aber erst später. Gleiches gilt für das in Zeile 20 angegebene Template.

DCA

Nun erstellen wir das DCA mit den Standardeinstellungen für unser Inhaltselement im Ordner system/modules/easyform/dca/. Die Datei für die Inahltselemente heißt tl_content.php.

Der Schlüssel der Palette (in diesem Beispiel easyform) muss dem Schlüssel entsprechen, der in der Datei system/modules/easyform/config/config.php für das Inhaltselement angegeben wurde.

Language

Damit es schön aussieht und verständlich ist, erstellen wir als nächstes die Einträge in der Datei system/modules/easyform/languages/de/default.php.

Auch gilt wieder der Schlüssel (easyform) muss der Palette und dem Eintrag in der Datei system/modules/easyform/config/config.php entsprechen. Zusätzlich zum Namen des Inhaltselements legen wir auch noch den Namen der Kategorie an. Hierbei handelt es sich um den Schlüssel vor easyform (in diesem Fall esit). Auch dieser muss in der Datei config.php und hier identisch sein.

Template

Nun greife ich etwas vor und erstelle das Template mit dem Formular, damit ich mich im Anschluss in der Klasse auf die Verarbeitung konzentrieren kann und das Template schon bekannt ist. Ich denke so ist es leichter zu verstehen. Den Pfad und den Namen für das Template haben wir ja bereits unten in der Autoload-Datei festgelegt (system/modules/easyform/templates/ce_easyform.html5).

In oberen Bereich befinden sich die Ausgaben für die Standardeinstellungen, die wir im Inhaltselement hinterlegen können. Das eigentliche Formular begint in Zeile 11. In Zeile 17 und 22 stehen dann die Eingabefelder. Dies Formular nimmt den Vor- und Nachnamen entgegen.

Die Ausgabe der Wert findet in den Zeilen 36 und 43 statt. Vorher prüfen wir in Zeile 30, ob überhaupt etwas zum Ausgeben vorhanden ist. Ist dies nicht der Fall, wird der ganze Block ausgelassen, damit kein unnötiges Markup erzeugt wird.

Klasse für die Ausgabe

Da wir für das Formular keine Werte an das Template übergeben müssen, können wir uns in der Methode genFeOutput ganz auf die Verarbeitung konzentrieren.

Das wichtigste steht ganz unten. In Zeile 40 prüfen wir, ob unser Formular abgesendet wurd, in Zeile 41 und 42 weisen wir dem Template die Werte des Formulars zu. Es wäre an dieser Stelle ebenso möglich, die Daten in einer Tabelle zu speichern oder mit der Klasse \Contao\Email per Mail zu versenden.

Manchmal will man auch zunächst Werte aus der DB lesen (z.B. eine Id) und diese (wie in Zeile 41 und 42) an das Formular weiterreichen. Auch dies wäre hier problemlos machbar.

Ergbenis

Das Ergbenis kann dann z.B. so aussehen:

easyform

Zurück

Einen Kommentar schreiben

Kommentar von Mike |

Hallo und danke für dieses Tutorial.
meine Frage ist es möglich das Angemeldete-Benutzer Formulare erstellen/änder und löschen können (eventuell auch als Privat oder Öffentlich erstellen können?). welcher Aufwand wäre damit verbunden?

"also der User erstellt in seinem Name ein Formular kann es änder oder löschen, er darf bestimmen in welcher Kategorie sein Formular erscheint und darf bestimmen ob es Sichtbar oder Privat ist."

Gruß Mike

Antwort von Patrick Froch

Hallo Mike,

dass ließe sich sicher umsetzen. Da die Benutzer Ihre Formulare im Backend verwalten sollen, müsste man den internen Formulargenerator erweitern und dafür sorgen, dass jeder nur seine eigenen Formulare sehen und bearbeiten kann. Dann müsste man noch überlegen, wie die Ausgabe der Formulare in Zusammenhang mit den Kategorien aussehen soll. Zum Aufwand kann ich leider keine allgemeingültige Aussage machen, dass hängt von den konkreten Anforderungen ab und wer es macht und wie hoch der Stundensatz ist.

Viele Grüße,
Patrick

Bitte addieren Sie 5 und 4.