Eine von mir betreute Webseite nutzt ein Formular, welches Felder enthält, die einer Erklärung bedürfen. Dabei soll das Formular so gestaltet sein, dass dazu kein "Erklärungs"-Feld über oder unter dem fraglichen Feld erzeugt wird, sondern es soll die Hilfe direkt neben der Feldbezeichnung oder dem Eingabefeld angezeigt werden - z.B. als kleines Icon, das der Besucher anklicken kann und welches dann ein Fenster mit einer Hilfe öffnet.
Da ich dazu keine passende Erweiterung finden kann, habe ich mir überlegt, daraus ein kleines Projekt zu machen und meine erste Contao-Erweiterung zu schreiben. (Falls jemand eine passende Erweiterung kennt, nur her damit!)
Ich habe mir das Ganze ungefähr so vorgestellt:
Für die Formularfelder wird in der Datenbank ein neues Feld angelegt, das den Hilfetext enthält. Per DCA wird dafür eine Eingabemöglichkeit im Backend erstellt. (Das funktioniert bereits)
Für das Formular selbst werden ebenfalls mehrere neue Felder in der Datenbank angelegt: wie soll der Link zur Hilfe aussehen (Text/Icon), wo soll er angezeigt werden (links/rechts von Label/Eingabefeld), wie soll er sich verhalten (per JS ein div o.ä. erzeugen/Link in einem neuen Fenster öffnen/...). Diese Optionen werden dann auch per DCA im Backend zur Verfügung gestellt.
Soweit funktioniert es schon ganz gut, ich war erstaunt, wie einfach die Entwicklung von der Hand geht.
Jetzt frage ich mich, wie ich die Darstellung im Frontend, also im Formuar, am sinnvollsten umsetze.
Zwei Optionen habe ich bisher gefunden:
- Die Klassen FormTextField, FormCheckBox etc. pp. erweitern, um ihre generate()-Methoden anpassen zu können - denn der Hilfe-Link muss ja je nach Typ des Eingabefelds an einer anderen Stelle erzeugt werden.
- Per Hook auf loadFormField die Formularfelder direkt anpassen. Soweit ich das verstehe, wird der Hook vor dem parse() aufgerufen, also bevor die FormFields über ihr jeweiliges Template zu HTML-Code generiert werden. Hier könnte ich z.B. das Template austauschen; allerdings kann ich nicht direkt den HTML-Code der bereits geparse()-ten FormFields modifizieren, richtig?
Mir scheint Option 1 sauberer zu sein. Hätte aber den Nachteil, dass andere Erweiterungen, die mit den Klassen FormTextField etc. pp. arbeiten, dann nicht mit meiner Erweiterung zusammenarbeiten würden, oder?
Würde mich freuen, wenn einer von euch erfahrenen Entwicklern einen Tip geben könnte, wie ich das Vorhaben richtig umsetze, oder ob ich völlig falsch herangehe.
MfG
Martin
Lesezeichen