Tomorrow Comes TodayI’m not gonna wait for anything to happen

tech TYPO3 27. Apr. 2012

TYPO3 - Entitäten und dynamische Formulare mit Seiten, Mailform und TypoScript

Eine sehr häufige Anforderung ist bestimmte Entitäten in TYPO3 abzubilden und darauf aufsetzend dynamisierte Formulare zu erstellen. Klassische Beispiele sind Ansprechpartner mit eigenen E-Mail-Formularen, Veranstaltungen mit einem Anmeldeformular oder Broschüren mit einem Bestellformular.

I.d.R. wird dann schnell auf den Formhandler oder selbst geschriebene Extensions zurück gegriffen. Dabei lässt sich das meistens mit den Standardfunktionen von TYPO3 nutzen.

Hier kurz eine Skizze des Lösungsansatzes - wozu ich später nocheinmal Codebeispiele posten werde.

  • Die Entität wird einfach als Seite (pages) oder Inhaltelement (tt_content) abgebildet. Sollte man das ein oder andere zusätzliche Feld benötigen, kann man diese ja hinzufügen. Oft reichen aber auch die vorhandenen Felder aus.
  • In der Detailansicht der jeweiligen Seiten (per Condition anzusteuern) wird dann per TypoScript ein Link zum Formular gerendert. Hier kann man bspw. unter dem Seitentitel oder nach dem Inhalt per stdWrap einen typolink einfügen, welcher neben der Zielseite mit dem Formular (am besten per Constant definiert) auch einen Parameter mit der eigenen UID enthält.
  • Auf der Formularseite lässt sich dann der Parameter per GPvar abfragen und per CONTENT der Inhalt des Quelldatensatzes auslesen.
  • Den Inhalt kann man z.B. über dem Formular im Inhaltbereich nochmal für den Nutzer anzeigen. So weiß man immer, woher man gerade kam und worauf sich das Formular beruft.
  • Das Formular ist dann ein gewöhnliches Mailform. Der größte Vorteil dabei ist, dass der Kunde/Redakteur später selbst die Felder anpassen kann.
  • Das Mailform wird nun mittels eines stdWrap auf die Hidden-Felder (welche immer vorhanden sind) um Daten aus dem Quelldatensatz ergänzt. Da geschieht genau wie die Anzeige oben per CONTENT und entsprechenden Wrappern. Und fertig ist das dynamisierte Mailform.

Und das ist keine bloße Idee, sondern funktioniert wunderbar in der Website, die mir gerade durch die Tasten geht.