Работа с ценами и валютами в Twig
Скопировать ссылку на статью
Скопировано

В twig-шаблонах доступны 2 фильтра для вывода форматированной цены с валютой:

{{ order.totalSumm|price }}       # 1 234,56 ₽
{{ order.totalSumm|ru_currency }} # 1 234,56 ₽

Данные фильтры без указания параметров работают одинаково, но рекомендуется везде, где возможно использовать фильтр |price.

Важным моментом является правильное определение и вывод валюты для суммы. Каждое из денежных полей объектов хранит значение в валюте объекта, либо в базовой валюте.

Например, поле order.totalSumm хранит значение в валюте заказа, а order.purchaseSumm — в базовой валюте.

В какой валюте хранится конкретное поле вы можете узнать из Справочника объектов.

Упомянутые выше фильтры, если код валюты не передан в параметрах фильтра, пытаются сначала определить валюту поля и выводят ее. Если определить не удалось, то выводится базовая валюта.

Чтобы упомянутые фильтры правильно определяли валюту поля, значение которого выводится, в фильтр нужно передавать непосредственно пару объект-поле. В случае, если вы сохраните значение из поля в промежуточную переменную и выведете цену данными фильтрами для переменной, то валютный контекст поля будет утерян, и выведется базовая валюта.

Рассмотрим на примере

Допустим в системе базовая валюта Российский рубль (₽) и дополнительная валюта Турецкая лира (₺). Также в системе оформлен заказ в Турецкой лире и мы хотим сформировать twig-шаблон печатной формы заказа и распечатать ее для данного заказа.

Укажем в шаблоне конструкцию вида:

Общая стоимость заказа: {{ order.totalSumm|price }}

В распечатанной форме будет выведено:

Общая стоимость заказа: 1 000,45 ₺

Теперь заменим конструкцию в шаблоне на:

{% set total = order.totalSumm %}
Общая стоимость заказа: {{ total|price }}

В распечатанной форме будет выведено:

Общая стоимость заказа: 1 000,45 ₽

Как видим, контекст валюты поля заказа был утерян и в результате шаблон выводит цену с неправильной валютой.

Стоит отметить, что валюта также будет корректно определяться, если обращение к полю будет производиться через цепочку вызова объектов.

Например:

{{ order.payments[0].amount|price }} # 1 000,45 ₺
{{ customer.lastOrder.totalSumm|price }} # 1 000,45 ₺
Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Справочник доступных Twig-функций
Аналогично фильтрам в шаблонах доступна большая часть стандартных функций, а также некоторые специальные функции. Общий перечень доступных функций приведен в статье.
Следующая статья
Отмена генерации Twig-шаблона
Могут возникать ситуации, когда требуется отменить генерацию шаблона. В статье описано, как это осуществить.