Skip to main content

Working in Laravel, I needed to loop through an array and know whether the current loop was odd or even row.  To do this add the expression to your Twig file:

{% set direction = loop.index0 is odd ? 'left' : 'right' %}

In the call above, the variable direction is set to either left or right depending on the value of the position of the loop row (loop.index0).  I then used the left or right value in a div class adding to a series of tailwind css definitions.  Such as text-{{ direction }}

The full div tag in this instance was:

<div class="font-light block text-5xl py-5 px-10 text-{{ direction }} tracking-wider text-white">{{ item.title }}</div>

The expression odd returns true if the given number is odd:

{{ var is odd }}

Therefore in the set direction call above, when odd is true the value of direction will be left.

 

Other twig set calls
{% set foo = 'bar' %}

After the set call, the foo variable is available in the template like any other ones:

{# displays bar #}

{{ foo }}

The assigned value can be any valid Twig expression:

{% set foo = [1, 2] %}

{% set foo = {'foo': 'bar'} %}

{% set foo = 'foo' ~ 'bar' %}

Several variables can be assigned in one block:

{% set foo, bar = 'foo', 'bar' %}

The above call is equivalent to writing:

{% set foo = 'foo' %}

{% set bar = 'bar' %}

The set tag can also be used to ‘capture’ chunks of text:

{% set foo %}
    <div id="pagination">
        ...
    </div>
{% endset %}

If you enable automatic output escaping, Twig will only consider the content to be safe when capturing chunks of text.

Note, that loops are scoped in Twig; therefore a variable declared inside a for loop is not accessible outside the loop itself:

{% for item in list %}
    {% set foo = item %}
{% endfor %}

{# foo is NOT available #}

If you want to access the variable, just declare it before the loop:

{% set foo = "" %}
{% for item in list %}
    {% set foo = item %}
{% endfor %}

{# foo is available #}

Related articles

Andrew Fletcher07 Jan 2025
Resolving Twig syntax errors in Drupal
The release of Drupal 10.4.0 sees stricter validation rules being applied to Twig templates, which can result in unexpected errors after an upgrade. One such issue involves the use of regular expressions within Twig's matches operator, leading to syntax errors that can break template rendering.This...