Тернарні оператори в Twig
Якщо ви працюєте з Twig, то знаєте: шаблони мають бути чистими, швидкими та без зайвого PHP-коду. Тернарні оператори — це той інструмент, який дозволяє замінити громіздкі {% if %} на одну компактну ря…
Якщо ви працюєте з 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 ? 'Є в наявності' : 'Під замовлення' }}
Корисні поради
-
Не зловживайте вкладеними тернарними операторами — код стає важким для
читання.
-
Для складних умов краще використовувати
{% if %} або
окремий макрос.
- У Twig 3.x+ тернарні оператори працюють ще стабільніше з типами.
-
Якщо використовуєте OpenCart 4.x - Twig там оновлений, тому всі наведені
конструкції працюють без проблем.
Збережіть цю статтю в закладки - вона точно знадобиться вам під час
наступного рефакторингу шаблону чи створення нового модуля.