Справочник доступных тегов, функций и фильтров Twig

Рассказываем какие теги, функции и фильтры Twig можно использовать в шаблонах документов и сообщений
Автор Анастасія Останіна
Обновлено 2 месяца назад

Для создания шаблонов сообщений, шаблонов документов для заказов или воронок используется шаблонизатор Twig.

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

Теги

  • if аналогичен оператору if в PHP. Можно использовать для проверки того, является ли выражение истинным. В условиях доступен также оператор {% else %}.

Например, если в заказе есть номер из источника, то мы выводим его; если же его нет, то указываем номер заказа из CRM:

{% if model.source_uuid %}{{ model.source_uuid }}{% else %}{{ model.id }}{% endif %} 

  • for цикл, который перебирает каждый элемент сущности. Используется для получения значений из массива товаров или оплат.
{% for payment in model.payments %}
    {{ payment.fiscal_url }} 
{% endfor %}

  • set устанавливает значение переменной. Можно добавлять свои переменные в середине кода для реализации кастомных расчетов и тому подобное. 

Например, чтобы посчитать остаток к оплате в заказе, нужно получить сумму которая уже оплачена с учетом, что может быть несколько платежей.

Поэтому объявляем переменную paid_amount с начальным значением 0. Далее с помощью цикла добавляем к ней уже оплаченные суммы:

{% set paid_amount = 0 %}
{% for payment in model.payments %}
  {% if payment.status == "paid" %}
    {% set paid_amount = paid_amount + payment.amount %}
  {% endif %}
{% endfor %}
Залишок до оплати = {{ (model.total_price - model.discount_amount + model.shipping_price - paid_amount)|format_currency('UAH', locale='uk') }}

  • apply  позволяет применять фильтры к блоку данных в шаблоне.

Например, можно сделать текст в верхнем регистре:

{% apply upper %}
    Цей текст буде весь великими літерами
{% endapply %}

Функции

  • date() преобразует аргумент в дату, чтобы обеспечить сравнение дат. Если аргумент не передан, функция возвращает текущую дату.\

Например, условие если дата доставки / отправки в заказе меньше чем дата, которая была 2 дня назад:

{% if date( model.shipping_date_actual) < date('-2days') %}
   дата доставки/відправки була більше 2-х днів тому
{% endif %}

  • max() находит наибольшее значение в наборе или массиве чисел.

Например, если нужно получить цену продажи самого дорогого товара в заказе, чтобы применить к ней какое-то специальное предложение:

{% set prices = [] %}
{% for product in model.products %}
    {% set prices = prices | merge([product.price_sold]) %}
{% endfor %}
Найдорожча ціна продажу: {{ max(prices) }} грн

  • min()  находит наименьшее значение в наборе или массиве чисел. 

Например, если нужно найти товар в заказе с самой низкой ценой закупки:

{% set min_product = null %}
{% set min_price = null %}

{% for product in model.products %}
    {% if min_price is null or product.purchased_price < min_price %}
        {% set min_price = product.purchased_price %}
        {% set min_product = product.product_name %}
    {% endif %}
{% endfor %}

Товар {{ min_product }}, ціна закупу {{ min_price }} грн

Фильтры

Фильтры применяются к переменным через вертикальную черту |.

Работа с регистром и форматированием текста:

  • capitalize делает первую букву в строке заглавной, а остальные маленькие.
    Например, город в адресе доставки покупатель может указать с маленькой буквы, тогда этот фильтр исправит этот момент:
{{ model.shipping_address_city|capitalize }}

  • lower форматирует все символы в строке в нижний регистр.

  • upper форматирует все символы в строке в верхний регистр.

  • trim удаляет пробелы или другие символы из начала и конца строки. 

Например, обрезаем символ + в номере телефона покупателя:

{{ model.client_phone|trim('+') }}

  • replace  динамически изменяю текст или форматирует его на основе переменных.

Например, если в названии товара есть слово «free», то заменять его на «Подарок»:

{% for product in model.products %}
    {{ product.product_name|replace({'free': 'Подарунок'}) }}
{% endfor %}

  • escape  экранирует символы в указанном формате.

  • spaceless удаляет пробелы между тегами HTML или пробелы в простом тексте.

  • nl2br заменяет перенос строки на html-тег <br>.

Форматирование чисел и валюты:

  • format_number форматирует число по заданному формату.

Например, выводим общую стоимость заказа прописью:

{{ model.grand_total|format_number(style="spellout", locale="uk") }}

Например, если нужно вывести цену продажи товара с двумя знаками после запятой:

{{ product.price_sold|number_format(2, ',', '') }}

  • format_currency выводит число в формате заданной валюты.

Например, форматируем цену продажи товара в валюту UAH:

{{ product.product_price|format_currency('UAH', locale='uk') }}

  • round округляет число до заданной точности.

Примеры округления общей стоимости заказа:

Если требуется математическое округление до меньшего или большего: 
{{ model.grand_total|round|format_currency(currency, locale='de') }} 

Если требуется округление всегда до большего:
{{ model.grand_total|round(0, 'floor')|format_currency(currency, locale='de') }}

Если требуется округление всегда до меньшего: 
{{ model.grand_total|round(0, 'ceil')|format_currency(currency, locale='de') }}

Работа с датами:

  • date преобразует дату в строку в указанном формате. 

Примеры форматирования сегодняшней даты (можно подставлять любые переменные содержащие дату):

{{ «now»|date(«d.m.Y») }} // 05.09.2024 

{{ «now»|date(«d-m-y H:i») }} // 05-09-24 11:22

{{ «now»|date(«d/m/Y H:i», «Europe/Paris») }} // 05/09/2024 13:24 - дата и время сейчас в переводе на часовой пояс Парижа 

  • date_modify — изменяет дату с помощью заданного условия (модификатора).

Например, добавляем к дате создания заказа 5 дней:

{{ model.created_at|date_modify("+5 day")|date("m.d.Y")}}

  • format_datetime — форматирует дату и время по заданному формату.

Операции с массивами:

  • first — получает первый элемент в массиве.

Например, если нужно вывести только ссылку на первый файл добавленный к заказу:

{% set filesArray = model.files|split('\n') %}
{{ filesArray|first }}

  • last — получает последний элемент в массиве.
    Например, если вы храните ФИО покупателей в формате «Петренко Иван» и нужно вывести только имя:
{% set foo = model.client_name|split(' ')%}
Вітаю, {{ foo|last }}!

  • slice — сортирует массив значений.

Например, сортируем список названий товаров по алфавиту:

{% for key, product in model.products|sort((a, b) => a.product_name <=> b.product_name)  %}
{{ product.product_name }}
{% endfor %}

  • merge — объединяет массивы в один.

  • reduce — позволяет последовательно обрабатывать каждый элемент массива и объединять их в одно значение.

Например, если нужно посчитать общее количество штук товара в заказе:

{{ model.products|reduce((carry, item) => carry + item.product_quantity, 0) }}

  • join — формирует строку из массива путем соединения элементов массива и добавляя разделитель между ними.

  • split — разделяет строку по заданному разделителю и возвращает список строк.

Например, если нужно обрезать другие свойства товара и оставлять только то, название которого вы указали:

{% for product in model.products %}
{% if product.product_properties %}
{% set properties = product.product_properties|split("\n") %}
{% for property in properties %}
{% set parts = property|split(':') %}
{% if parts|length == 2 and parts[0]|trim == 'Розмір' %}
{% set rozmir = parts[1]|trim %}
Розмір: {{ rozmir }}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

Общие и вспомогательные:

  • default — возвращает переданное значение по умолчанию, если значение не определено или пустое, иначе значение переменной. 
    Например, если в заказе нет телефона покупателя, то выведется текст 'не указан': 
Телефон: {{ model.client_phone |default('не вказано') }}

  • lengthвозвращает количество элементов или длину строки.

Например, если нужно посчитать количество позиций в заказе:

Всего наименований  {{ model.products|length }}

  • raw — получает значения в том виде, в котором они есть (без экранирования).

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