If ViewHelper <f:if>

@todo: : Declare final with next major

This ViewHelper implements an if/else condition.

Fluid Boolean Rules / Conditions:

A condition is evaluated as a boolean value, so you can use any boolean argument, like a variable. Alternatively, you can use a full boolean expression. The entered expression is evaluated as a PHP expression. You can combine multiple expressions via && (logical AND) and || (logical OR).

An expression can also be prepended with the ! ("not") character, which will negate that expression.

Have a look into the Fluid section of the "TYPO3 Explained" Documentation for more details about complex conditions.

Boolean expressions have the following form:

is true variant: {variable}:

<f:if condition="{foo}">
    Will be shown if foo is truthy.
</f:if>
Copied!

or is false variant: !{variable}:

<f:if condition="!{foo}">
    Will be shown if foo is falsy.
</f:if>
Copied!

or comparisons with expressions:

XX Comparator YY
Copied!

Comparator is one of: ==, !=, <, <=, >, >= and % The % operator (modulo) converts the result of the operation to boolean.

XX and YY can be one of:

  • Number
  • String
  • Object Accessor (object.property)
  • Array
  • a ViewHelper
<f:if condition="{rank} > 100">
    Will be shown if rank is > 100
</f:if>
<f:if condition="{rank} % 2">
    Will be shown if rank % 2 != 0.
</f:if>
<f:if condition="{rank} == {k:bar()}">
    Checks if rank is equal to the result of the ViewHelper "k:bar"
</f:if>
<f:if condition="{object.property} == 'stringToCompare'">
    Will result in true if {object.property}'s represented value
    equals 'stringToCompare'.
</f:if>
Copied!

Examples

Basic usage

<f:if condition="somecondition">
    This is being shown in case the condition matches
</f:if>
Copied!

Output:

Everything inside the <f:if> tag is being displayed if the condition evaluates to true.
Copied!

If / then / else

<f:if condition="somecondition">
    <f:then>
        This is being shown in case the condition matches.
    </f:then>
    <f:else>
        This is being displayed in case the condition evaluates to false.
    </f:else>
</f:if>
Copied!

Output:

Everything inside the "then" tag is displayed if the condition evaluates to true.
Otherwise, everything inside the "else" tag is displayed.
Copied!

Inline notation

{f:if(condition: someCondition, then: 'condition is met', else: 'condition is not met')}
Copied!

Output:

The value of the "then" attribute is displayed if the condition evaluates to true.
Otherwise, everything the value of the "else" attribute is displayed.
Copied!

Combining multiple conditions

<f:if condition="{user.rank} > 100 && {user.type} == 'contributor'">
    <f:then>
        This is being shown in case both conditions match.
    </f:then>
    <f:else if="{user.rank} > 200 && ({user.type} == 'contributor' || {user.type} == 'developer')">
        This is being displayed in case the first block of the condition evaluates to true and any condition in
        the second condition block evaluates to true.
    </f:else>
    <f:else>
        This is being displayed when none of the above conditions evaluated to true.
    </f:else>
</f:if>
Copied!

Output:

Depending on which expression evaluated to true, that value is displayed.
If no expression matched, the contents inside the final "else" tag are displayed.
Copied!

Source code

Go to the source code of this ViewHelper: IfViewHelper.php (GitHub).

Arguments

The following arguments are available for the if ViewHelper:

condition

condition
Type
boolean
Default
false
Condition expression conforming to Fluid boolean rules

else

else
Type
mixed
Value to be returned if the condition if not met.

then

then
Type
mixed
Value to be returned if the condition if met.