twig Условие if Не равно строке ( !== 'string'), not in

Задача

Сравнить значение переменной в шаблоне twig с какой-то строкой.

Решение

  1. Первый вариант - сравнивать значение "в лоб", с помощью оператора ==:
    {% if category.name == 'Скоро в продаже' %}
           <div class= "type-new">
                <img src="/images/soon.png">
           </div>
    {% else %}
           <div class="type">
                 <img src="/images/soon.png">
           </div>
    {% endif %}
  2. Оператор, соответствующий !== в twig - это not in. Правда, как показано в документации, not in используется как конструкция, ищущая значение в массиве. В частном случае, значение в массиве может быть одно:
    {% if pageTitle not in ['Каталог товаров'] %}
  3. Также, чтобы совершить действия при условии НЕравенства, просто оставьте поле после if пустым, а else заполните действием:
    {% if pageTitle == 'Каталог товаров' and category.name == 'Скоро в продаже' %}
    {% else %}
         <div>
              {{ category.name }}
         </div>
    {% endif %}
  4. Если задача усложняется и необходимо, чтобы переменная была не равна пустой строке, можно использовать не саму переменную, а её длину (фильтр lenght). И также меняем местами "если" и "иначе":
    {% if pathToPhoto|length == null %}
          <a href="#">
               <img src="/images/no-photo.png">
         </a>
    {% else %}
         <a href="#">
                 <img src="{{ pathToPhoto }}">
         </a>
    {% endif %}
vedro-compota's picture

!== похоже в twig нет

варианты:

  1. Для начало можно вполне использовать популярный в шаблонизаторах логический not:
    {% if not category.name == 'Скоро в продаже' %}
  2. Во вторых поддерживаются php-выражения -- может и !== в том числе. Вы пробовали?

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

soon_sale

_____________
матфак вгу и остальная классика =)

melisa's picture

1. Конечно, проверяла.
Вариант с not также не работает.
2. Согласна, косяк

vedro-compota's picture

Конечно, проверяла.
Вариант с not также не работает.

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

_____________
матфак вгу и остальная классика =)

melisa's picture

Моя ошибка была в синтаксисе.
Как показано в документации, not in используется как конструкция, ищущая значение в массиве. В частном случае, значение в массиве может быть одно:

{% if pageTitle not in ['Каталог товаров'] %}

добавила это в текст статьи

vedro-compota's picture

not это тоже самое что и !. Едва ли это просто приставка к in.

_____________
матфак вгу и остальная классика =)