Typo3 Fluid: if Viewhelper (if – then – elseif – else)

Mit Typo3 8 wurde Fluid als Standalone Plugin weiterentwickelt und einigen Änderungen und Erweiterungen unterzogen. Da die Frage immer wieder mal auftaucht – hier eine kurze Übersicht die der if Viewhelper in Typo3 Fluid aufgebaut ist. Einmal in Typo3 7 und früher, einmal in Typo3 ab Version 8.

Fluid if Viewhelper in Typo3 7 und früher

Hier gab es das elseif-Konstrukt noch nicht, und man musste die if-Conditions in der Regel verschachteln:

<f:if condition="{variable} == 'bestimmterWert'">
    <f:then>
       // dann führe folgendes aus
    </f:then>
    <f:else>
        <f:if condition="{andereVariable} == 'bestimmterWert'">
            <f:then>
                // dann führe folgendes aus
            </f:then>
           <f:else>
               // dann führe diese Anweisungen aus
           </f:else>
        </f:if>
    </f:else>
</f:if>

Eine Ausnahme gab es, um ohne die if-Verschachtelung auszukommen – man konnte via Arrays die logische UND-Verknüpfung (&&) wie folgt nachbauen, und sich somit das Verschachteln der if-Anweisungen sparen:

<f:if condition="{0: jahre, 1: monate} == {0: vergleichsJahr, 1: vergleichsMonat}">
// dann führe folgendes aus
</f:if>

 

Fluid if-Viewhelper in Typo3 8 und höher

<f:if condition="{variable} == 'bestimmterWert'">
     <f:then>
          // dann führe folgendes aus
     </f:then>
     <f:else if="{andereVariable} == 'bestimmterWert'">
          // dann führe folgendes aus
     </f:else>
     <f:else>
         // für den Rest führe folgendes aus..
     </f:else>
</f:if>

Möglich ist auch, diese Abfragen mit logischen UND bzw. ODER in kürzerer Schreibweise zu schreiben:

<f:if condition="({variableOne} && {variableTwo}) || {variableThree} || {variableFour}">
// Done if both variable one and two evaluate to true,
// or if either variable three or four do.
</f:if>

Weitere Beispiele:

<f:if condition="{variable} || {andereVariable}">
    // dann führe folgendes aus
</f:if>

Ist wahr, wenn eine der beiden Variablen gesetzt ist.

 

Inline Schreibweise von if-Conditions:

If – Abfragen können auch inline geschrieben werden. Das ist z.B. sinnvoll, wenn in Fluid-Templates je nach gesetzten Variablen oder bei bestimmten Varialben-Werten bestimmte CSS-Klassen ausgegeben werden sollen.

 

Beispielsweise wenn im Backend bei Inhaltselementen im Reiter „Erscheinungsbild“ bestimmte Layouts, Frames oder Abstände ausgewählt werden.

Hier die generelle Schreibweise:

{f:if(condition: variable1, then: 'bestimmterWert')}

// Hier wird "bestimmterWert" ausgegeben, wenn die Variable "variable1" gesetzt ist
{f:if(condition: '{variable1} == "Yes"', then: 'bestimmterWert')}

// Hier wird "bestimmterWert" ausgegeben, wenn die Variable "variable1" dem String "Yes" entspricht
{f:if(condition: '{variable1} == 1', then: 'bestimmterWert')}

// Hier wird die Variable "bestimmterWert" ausgegeben, wenn die Variable "variable1" der Zahl 1 entspricht.
{f:if(condition: '{variable1} == 1', then: 'bestimmterWert', else: 'andererWert')}

// Wenn die Variable "variable1" der Zahl 1 entspricht wird "bestimmterWert" ausgegeben, in allen anderen Fällen "andererWert".

 

Typo3 Fluid: Debugging

Debug von bestimmten Variablen oder allen Variablen:

<f:debug title="Debug of MyArray">{myarray}</f:debug>
<f:debug title="All available variables">{_all}</f:debug>

 

Debug bis zu einer bestimmten Tiefe der Variable:

<f:debug maxDepth="3">{data}</f:debug>

 

Um die Debug-Informationen nicht über der Webseite, sondern inline an der Stelle wo er vorkommt anzuzeigen kann folgender Code verwendet werden:

<f:debug inline="true">{data}</f:debug>