Die TYPO3-Extension powermail von Alex Kellner begleitet mich seit vielen Jahren. Sie ist eine gute und zuverlässige Wahl, wenn es in einer TYPO3-Installation darum geht ein Formular umzusetzen.
In einem sehr umfangreichen Formular in Verbindung mit powermail_cond war die Frage, wie man die Bestätigungsseite und die dokumentierende E-Mail besser strukturieren kann.
Nutzt man nämlich die Standard-Variable {powermail_all}, um die in dem Formular übermittelten Werte darzustellen, so werden alle Antworten hintereinander weg in einer Tabelle dargestellt. Handelt es sich dabei um 20 oder mehr Werte, so erscheint die Auflistung unter Umständen etwas unübersichtlich.
Der Kunde wollte {powermail_all} deshalb nach einzelnen „Seiten“ strukturiert dargestellt haben. Der Fluid-Viewhelper f:groupedFor löst hier das Problem auf elegante und effiziente Weise. Dazu wird das Powermail-Fluidtemplate Templates/Form/PowermailAll.html folgendermaßen angepasst. Statt der f:for-Anweisung <f:for each=“{mail.answers}“ as=“answer“> … </f:for> verwenden wir:
<f:groupedFor each="{mail.answers}" as="answers"
groupBy="field.pages.title" groupKey="title">
<tbody>
<tr>
<td colspan="2">{title}</td>
</tr>
<f:for each="{answers}" as="answer">
[Hier die unveränderte f:if-Abfrage des Templates]
</f:for>
</tbody>
</f:groupedFor>
Dabei greift der Fluid-Viewhelper groupedFor auf das Feld „field.pages.title“ innerhalb des Arrays „mail.answers“ zu. Darin steht jeweils der Titel des Formularabschnitts, in der sich das Formularfeld befindet.
Man kann dann per CSS die einzelnen Abschnitte stylen, etwa indem man tbody unten eine dickere Linie gibt oder der Tabellenzeile mit dem Abschnittstitel eine andere Darstellung spendiert.
Weiterführende Dokumentation:
https://fluidtypo3.org/viewhelpers/fluid/master/GroupedForViewHelper.html
https://www.typo3lexikon.de/typo3-tutorials/core/systemextensions/fluid/fluid-viewhelper/#c666