Wrappe n-Elemente mit TYPO3 Fluid Viewhelper


Problem: wir haben 12 Elemente einer Extension und alle 2 Elemente sollen in ein extra div gewrappt werden. Bis jetzt habe ich leider nichts fertiges dafür bei den ViewHelpern gefunden. Daher habe ich es versucht folgendermaßen um zusetzen. Zuerst wird ein öffnendes Div geschrieben, dann zum Schluss ein schließendes. Im Div selbst fragen wir wir ab die Anzahl des Elements ab und schreiben dann ein schließendes und ein öffnendes div-Tag. In Code sieht es dann auch schon so aus.

{f:if(condition: iter.isFirst, then: '
<div>')}
{listRow.value}
{f:if(condition: iter.isLast, then: '</div>
')}

Als erstes die f:for each Schleife, hier speichern wir in der Variable „iter“ alle Iterations Informationen, das können folgende sein:

iteration (string, optional): The name of the variable to store iteration information (index, cycle, isFirst, isLast, isEven, isOdd) Quelle: docs.typo3.org

Damit nicht leere tags dastehen, schreiben wir das öffnende und schließende Tag mit einer If Abfrage.

Mit Hilfe der Iterations Info cycle und Modulo können wir nun errechnen wann immer unsere zwei(oder 3,4) Elemente durchlaufen sind um das schließende und öffnende Div Tag zu schreiben.

{f:if(condition: iter.isLast, else: '<div>')}

Die Idee ist einfach if (Element % 2 == 0 AND nicht das letzte Elment) dann schreibe

'<div>'.

Leider habe ich es nicht hinbekommen die Schreibweise eins zu eins zu übernehmen. Die Condition Modulo 2 konnte ich nicht fragen ob Sie null ist, daher habe ich frage ich oben eigentlich ob es null ist und nutze dann nur den else Zweig um die logische UND Verknüpfung in einer neuen IF Abfrage unter zubringen, Auch hier nutze ich nur den Else Zweig. Wenn ich nicht Abfrage ob isLast == 0 ist, kann es bei z.B. genau zwei Elementen zu einem leeren DIV tag kommen.

</div>

Also der Code noch mal kompett:


{f:if(condition: iter.isFirst, then: '</code>
<div>')}
{listRow.value}


{f:if(condition: iter.isLast, else: '</div>
<div>')}


{f:if(condition: iter.isLast, then: '</div>
')}