Тернарні оператори в Twig

OpenCartBot - 01.04.2026
Тернарні оператори в Twig

Якщо ви працюєте з Twig, то знаєте: шаблони мають бути чистими, швидкими та без зайвого PHP-коду. Тернарні оператори — це той інструмент, який дозволяє замінити громіздкі {% if %} на одну компактну рядок і заощадити десятки рядків у шаблонах.

Twig використовують у багатьох популярних системах:

  • Symfony
  • Drupal 8+ / 10+
  • OpenCart 3.0+ та 4.x
  • Craft CMS
  • Bolt CMS, Grav та багатьох інших PHP-проєктах

Особливо корисна ця шпаргалка для розробників OpenCart. У цьому CMS майже всі шаблони (product.twig, category.twig, cart.twig тощо) побудовані на Twig, і вміння писати короткі умовні вирази значно спрощує кастомізацію теми, розробку модулів і підтримку проєкту.

Підтримка розширених тернарних операторів з’явилася ще в Twig 1.12.0. З того часу вони стали must-have для будь-якого Twig-розробника.


1. Класичний тернарний оператор (if — else)

{{ foo ? 'yes' : 'no' }}

2. Оператор Елвіса (Elvis operator) — «якщо є, виведи його, інакше default»

{{ foo ?: 'no' }}

Або повний еквівалент:

{{ foo ? foo : 'no' }}

3. Односторонній тернарний оператор (тільки true-частина)

{{ foo ? 'yes' }}

Або явно:

{{ foo ? 'yes' : '' }}

4. Null coalescing operator ?? (з Twig 2.7.0+, для старих версій OpenCart не підходить)

{{ foo ?? 'no' }}

Важливо: Повертає foo, тільки якщо змінна визначена і не є null. Порожні значення ('', 0, false, порожній масив) вважаються валідними і не заміняються.


5. Фільтр default — найгнучкіший варіант

{{ foo|default('no') }}

Різниця з ??:

  • |default заміняє значення, якщо змінна не визначена або порожня (false, 0, '', null, []).
  • ?? заміняє тільки null / невизначену змінну.

При розробці модулів чи шаблонів OpenCart зручно використовувати |default, бо багато змінних можуть бути порожніми рядками або нулями.


Порівняльна таблиця

Оператор Замінює null/невизначене Замінює порожнє ('' , 0 , false)
foo ? 'yes' : 'no' Так Так
foo ?: 'no' Так Так
foo ? 'yes' Так Так
foo ?? 'no' Так Ні
foo|default('no') Так Так

Приклади для OpenCart

<!-- Наявність -->
{{ product.quantity > 0 ? 'Є в наявності' : 'Під замовлення' }}

<!-- Клас для акційного товару -->
<div class="{{ product.special ? 'product--sale' : '' }}">

Корисні поради

  1. Не зловживайте вкладеними тернарними операторами — код стає важким для читання.
  2. Для складних умов краще використовувати {% if %} або окремий макрос.
  3. У Twig 3.x+ тернарні оператори працюють ще стабільніше з типами.
  4. Якщо використовуєте OpenCart 4.x - Twig там оновлений, тому всі наведені конструкції працюють без проблем.

Збережіть цю статтю в закладки - вона точно знадобиться вам під час наступного рефакторингу шаблону чи створення нового модуля.


Рекомендовані модулі


Інші статті