Twig функции

Другие статьи серии Twig

Twig в своих шаблонах не позволяет вызывать php функции. Взамен этого шаблонизатор создает свои собственные функции. Как и в случае с Twig фильтрами, twig обладает определенным набором встроенных функций, к которым Drupal 8 добавляет свои специфичные Twig функции. Любой разработчик в случае необходимости может добавить свою собственную twig функцию. Для вызова функции в twig шаблоне ее достаточно обернуть в двойные фигурные скобки и передать в нее все необходимые аргументы:


{{ function(arg1, arg2, ...) }}

Рассмотрим функции, которые предоставляет сам Twig:

Функция block

Когда шаблон наследуется (подробнее о наследовании шаблонов Twig), вы можете вывести блок дважды при помощи функции block (параметр в функции - имя блока):


<title>{% block title %}{% endblock %}</title>

{# Второй раз выводим блок title #}
<h1>{{ block('title') }}</h1>

Функция constant

Функция constant возвращает значение константы, имя которой передается в аргумент функции:


{{ some_date|date(constant('DATE_W3C')) }}
{{ constant('\Drupal::VERSION') }}

{# Константу можно получить из объекта #}
{{ constant('RSS', object) }}

Функция date

Конвертирует аргумент в дату и используется для сравнения дат:


{% if date(user.created) < date('-2days') %}
  ...
{% endif %}

Вы можете передать часовой пояс вторым аргументом:


{% if date(user.created) < date('-2days', 'Europe/Minsk') %}
    ...
{% endif %}

Если аргументы в функцию не передавать, возвращает текущее время:


{% if date(user.created) < date() %}
  {# Такое условие всегда выполнится #}
{% endif %}

Функция dump

Функция dump выводит отладочную информацию о переменных шаблона:


{{ dump(user) }}
{# Для улучшения читабельности информации о переменной оберните код в html тег pre #}

Можно вывести информацию сразу о нескольких переменных :


{{ dump(user, tags) }}

Если не передавать в функцию аргументы, выведется информация о всех переменных шаблона:


{{ dump() }}

Функция max

Функция max возвращает наибольшее значение массива или переданных значений:


{{ max(1, 3, 2) }}
{# Результат: 3 #}

{{ max([2, 4, 8]) }}
{# Результат: 8 #}

Если передается ассоциативный массив, то ключи массива игнорируются и сравниваются только значения элементов массива:


{{ max({2: 'e', 1: 'a', 3: 'b', 5: 'd', 4: 'c'}) }}
{# Результат: 'e' #}

Функция min

Функция min возвращает наименьшее значение массива или переданных значений:


{{ min(1, 3, 2) }}
{# Результат: 1 #}

{{ min([2, 4, 8]) }}
{# Результат: 2 #}

Если передается ассоциативный массив, то ключи массива игнорируются и сравниваются только значения элементов массива:


{{ min({2: 'e', 3: 'a', 1: 'b', 5: 'd', 4: 'c'}) }}
{# Результат: 'a' #}

Функция parent

Если шаблон использует наследование, то в переопределяемом блоке возможно функцией parent() вывести содержимое блока, определенное в родительском шаблоне:


{% extends "base.html" %}

{% block sidebar %}
  <h3>Table Of Contents</h3>
  ...
  {{ parent() }}
{% endblock %}

В примере parent() вернет контент из блока sidebar определенный в base.html шаблоне.

Функция random

Функция random возвращает рандомное значение в зависимости от типа переданного аргумента:

  • случайный элемент массива;
  • случайный символ строки;
  • случайное число между нулем и числом, переданным в качестве первого аргумента в функцию.

{{ random(['apple', 'orange', 'citrus']) }} 
{# Пример вывода: 'orange' #}

{{ random('ABC') }}                         
{# Пример вывода: 'C' #}

{{ random() }}                              
{# Пример вывода: 15386094 (использует php функцию mt_rand()) #}

{{ random(5) }}                             
{# Пример вывода: 3 #}

Функция range

Функция range возвращает массив, содержащий диапазон чисел:


{% for i in range(0, 3) %}
  {{ i }},
{% endfor %}
{# Результат: 0, 1, 2, 3, #}

Если получен шаг в качестве третьего аргумента, то он будет определять инкремент (или декремент):


{% for i in range(0, 6, 2) %}
  {{ i }},
{% endfor %}
{# Результат: 0, 2, 4, 6, #}

Имеет альтернативный синтаксис (с шагом равным 1):


{% for i in 0..3 %}
  {{ i }},
{% endfor %}
{# Результат: 0, 1, 2, 3, #}

Drupal специфичные Twig функции:

Функция render_var

Функция render_var принимает аргументом рендерный массив и возвращает отрендеренный вывод. Используется только для внутреннего использования, в шаблонах ее использовать не нужно, так как она будет автоматически применена к выводу переменной (если она содержит рендерный массив).


{{ render_var(content) }}
{# Аналогично отрендерится и без render_var() #}
{{ content }}

Функция url

Функция url возвращает абсолютный урл для роута, имя которого функция принимает первым аргументом. Вторым аргументом в функцию можно передать ассоциативный массив, содержащий имена и значения параметров роута. Третьим аргументом можно в функцию передать дополнительные опции в виде ассоциативного массива, все возможные опции в документации Url::fromRoute (absolute принудительно выставлен в TRUE).


{{ url('user.register') }}
{# Результат: 'http://example.com/user/register' #}

{{ url('user.register', {}, {'fragment': 'bottom' }) }}
{# Результат: 'http://example.com/user/register#bottom' #}

Функция path

Функция path возвращает путь роута, получая в аргументы имя роута и его параметры:


<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">
{# Результат: '<a href="/" title="Главная" rel="home">Главная</a>' #}

{{ path('user.register') }}
{# Результат: '/user/register' #}

{{ path('user.register', {}, {'fragment': 'bottom' }) }}
{# Результат: '/user/register#bottom' #}

Функция link

Функция link возвращает отрендеренную ссылку. Первым аргументов получает текст анкора ссылки, вторым - объект URL (\Drupal\Core\Url) или имя роута, в третий аргумент передаются атрибуты для ссылки:


{{ link('register', 'route:user.register', {'id': 'user-register'}) }}
{# Результат: '<a href="/user/register" id="user-register">register</a>' #}

Функция file_url

Вспомогательная функция file_url принимает в аргумент путь файла относительно корня drupal и возвращает абсолютный путь к файлу:


{{ file_url('core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js') }}
{# Результат: 'http://example.com/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js' #}

Функция attach_library

Функция attach_library добавляет возможность подключения библиотеки в шаблоне:


{# В общем виде она вызывается так #}
{{ attach_library('extension/library_name') }}
{# extension - имя модуля или темы, core - библиотеки ядра #}

{# Примеры подключения библиотек #}
{{ attach_library('classy/drupal.comment.threaded') }}
{{ attach_library('classy/forum') }}

Функция active_theme_path

Функция active_theme_path возвращает путь активной темы:


{{ active_theme_path() }}

Функция active_theme

Функция active_theme возвращает имя активной темы:


{{ active_theme() }}

Функция kint

Кроме использования twig функции dump(), которую добавляет сам Twig, можно для отладки переменных в шаблонах пользоваться функцией kint(), которую добавляет devel kint - подмодуль devel. Многие наверняка для отладки переменных в Drupal 7 использовали devel функцию dpm(), которая при выводе использует krumo. Так вот, kint является этаким krumo-заменителем. Kint, в отличие от krumo, при выводе объектов добавляет информацию о всех его методах.


{{ kint(user) }}

twig kint

Можно вывести информацию сразу о нескольких переменных :


{{ kint(user, tags) }}

Если не передавать в функцию аргументы, выведется информация о всех переменных шаблона:


{{ kint() }}



Официальная документация по функциям Twig http://twig.sensiolabs.org/doc/functions/index.html