Functions
cycle
The cycle
function is used to loop over an array of values repeatedly.
Usage:
Here's how you can use the cycle
function:
{% set start_year = date() | date('Y') %}
{% set end_year = start_year + 5 %}
{% for year in start_year..end_year %}
{{ cycle(['odd', 'even'], loop.index0) }}
{% endfor %}
This will output:
odd
even
odd
even
odd
even
The array passed to cycle
can contain any number of values:
{% set fruits = ['apple', 'orange', 'citrus'] %}
{% for i in 0..10 %}
{{ cycle(fruits, i) }}
{% endfor %}
Which results in:
apple
orange
citrus
apple
orange
citrus
apple
orange
citrus
apple
orange
Arguments:
values
: The list of values to cycle on.position
: The cycle position.
date
The date
function allows conversion of an argument to a date, facilitating date comparisons.
Usage:
To compare dates:
{% if date(user.created_at) < date('-2days') %}
{# do something #}
{% endif %}
The provided date argument should match one of the following date and time formats.
Supported Date and Time Formats
ISO 8601 Date:
YYYY-MM-DD
(e.g., "2021-05-25")ISO 8601 DateTime:
YYYY-MM-DDTHH:MM:SS
(e.g., "2021-05-25T15:30:45")SQL DateTime:
YYYY-MM-DD HH:MM:SS
(e.g., "2021-05-25 15:30:45")Common Log Format:
DD/Month/YYYY:HH:MM:SS
(e.g., "25/May/2021:15:30:45")Time:
HH:MM
(e.g., "15:30"),HH:MM:SS
(e.g., "15:30:45")Relative Formats:
now
,+1 day
,last Monday
,first day of next month
,3 days ago
,+2 weeks
,last day of +1 month
Day of the week:
Monday
,Tue
, etc.Month names:
January
,Feb
, etc.Relative Keywords:
yesterday
,today
,tomorrow
,Duration:
P1D
(1 day),PT2H
(2 hours), Combined:P1DT2H
(1 day and 2 hours)Miscellaneous:
@1234567890
(Unix Timestamp)
You can also specify a timezone as a secondary argument:
{% if date(user.created_at) < date('-2days', 'Europe/Paris') %}
{# do something #}
{% endif %}
If no argument is given, the function will return the current date:
{% if date(user.created_at) < date() %}
{# always! #}
{% endif %}
Arguments:
date
: The date to be converted.timezone
: The timezone in which the date should be represented.
max
The max
function provides the highest value from a sequence or a set of values.
Usage:
For separate numbers:
{{ max(1, 3, 2) }}
For arrays:
{{ max([1, 3, 2]) }}
When applied on a hashes, the max
function disregards the keys, only comparing the values:
{{ max({2: "e", 1: "a", 3: "b", 5: "d", 4: "c"}) }}
{# returns "e" #}
min
The min
function provides the smallest value from a sequence or a set of values.
Usage:
For individual numbers:
{{ min(1, 3, 2) }}
For arrays:
{{ min([1, 3, 2]) }}
When applied on hashes, the min
function disregards the keys, only comparing the values:
{{ min({2: "e", 3: "a", 1: "b", 5: "d", 4: "c"}) }}
{# returns "a" #}
random
The random
function generates a random value, which varies based on the provided argument's type:
A random item from a sequence.
{{ random(['apple', 'orange', 'citrus']) }} {# example output: orange #}
A random character from a string.
{{ random('ABC') }} {# example output: C #}
A random integer between 0 and the integer parameter (inclusive).
{{ random() }} {# example output: 15386094 #}
A random integer between the integer parameter (when negative) and 0 (inclusive).
{{ random(5) }} {# example output: 3 #}
A random integer between the first and the second integer parameters (inclusive).
{{ random(50, 100) }} {# example output: 63 #}
Arguments:
values
: The values to choose from.max
: The maximum value whenvalues
is an integer.
range
The range
function produces a list that contains an arithmetic progression of integers.
Basic Usage:
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
This outputs: 0, 1, 2, 3,
Specifying Steps:
When the step value is provided (as the third argument), it dictates the increment (or decrement for negative values):
{% for i in range(0, 6, 2) %}
{{ i }},
{% endfor %}
This will produce: 0, 2, 4, 6,
Auto-Decrementing:
If the starting value is larger than the ending value, range
automatically assumes a step of -1:
{% for i in range(3, 0) %}
{{ i }},
{% endfor %}
Which results in: 3, 2, 1, 0,
Syntax Sugar with the ..
Operator:
The template engine provides a handy ..
operator which is essentially a shorter form for the range
function. It defaults to a step of 1 (or -1 if the starting value is more than the ending value):
{% for i in 0..3 %}
{{ i }},
{% endfor %}
Arguments:
low
: The starting value of the sequence.high
: The maximum potential value of the sequence.step
: The difference between consecutive numbers in the sequence.
Last updated