Я пытаюсь использовать оператор «И» в TWIG в Opencart 3, и он не работает. Пожалуйста, скажите мне, что я делаю неправильно.
У меня есть некоторые атрибуты продукта. И я хочу сделать условие, что если два атрибута с определенным идентификатором есть, то условие выполняется.
{% for attribute_group in attribute_groups %}
{% for attribute in attribute_group.attribute %}
{% if attribute.attribute_id == 2 and attribute.attribute_id == 3 %}
First condition
{% elseif attribute.attribute_id == 2 %}
Second condition
{% elseif attribute.attribute_id == 3 %}
Third condition
{% else %}
{% endif %}
{% endfor %}
{% endfor %
Вот пример текста:
if there is an attribute with ID equal 2 and an attribute with ID equal 3 then write "Floor/Number of floors".
if there is an attribute with ID equal 2 only then write "Floor"
if there is an attribute with ID equal 3 only then write "Numbers of floors".
Что-то не может быть и X, и Y одновременно. Кроме того, я бы посоветовал вам проверить это в контроллере, а не в представлении.
В любом случае, если вы хотите сделать это в представлении, вам нужно будет отслеживать найденные атрибуты. Вы можете сделать это с двумя логическими значениями или просто добавить счетчик.
{% set cnt = 0 %}
{% for attribute_group in attribute_groups %}
{% for attribute in attribute_group.attribute %}
{% if attribute.attribute_id == 2 or attribute.attribute_id == 3 %}
{% set cnt = cnt + 1 %}
{% endif %}
{% endfor %}
{% endfor %}
{% if cnt == 2 %}
{# do something #}
{% endif %}
Вы можете упростить if, используя тест in
{% if attribute.attribute_id in [2, 3,] %}
Обновление моего ответа, потому что OP изменил требования вопроса
{% set words = [] %}
{% for attribute_group in attribute_groups %}
{% for attribute in attribute_group.attribute %}
{% if attribute.attribute_id == 2 %}
{% set words = words|merge(['Floor',]) %}
{% elseif attribute.attribute_id == 3 %}
{% set words = words|merge(['Numbers of floors',]) %}
{% endif %}
{% endfor %}
{% endfor %}
{% if words|default %}
{{ words|join('/') }}
{% endif %}
Демо
Первый пример мне не подходит, потому что мне нужно вывести текст в условиях. Я уже пробовал второй пример с "IN". Это работает точно так же, как если бы вы использовали оператор ИЛИ в моем примере. Я добавил текстовый пример того, что мне нужно, чтобы ответить на мой вопрос. Посмотрите пожалуйста, может станет понятнее.
Да. Это работает. Спасибо. Подскажите, пожалуйста, как сделать то же самое, но теперь использовать не слова, а переменную, например {{ attribute.text }}
Вам все равно нужно будет сохранить значение attribute.text внутри массива words, просто замените 'Floor' на attribute.text, если эти два слова действительно находятся внутри attribute.text, вы просто используете if с проверкой in, а не if-elseif
Хм, может в моем случае нужно другое условие. Мне нужно, чтобы условие срабатывало, когда есть атрибут с ID 2 и атрибут с ID3. Они не одинаковые, они разные. Но необходимо, чтобы они оба присутствовали с какими-либо данными, чтобы это условие сработало.