Opencart 3 TWIG: как использовать оператор AND

Я пытаюсь использовать оператор «И» в 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".

Хм, может в моем случае нужно другое условие. Мне нужно, чтобы условие срабатывало, когда есть атрибут с ID 2 и атрибут с ID3. Они не одинаковые, они разные. Но необходимо, чтобы они оба присутствовали с какими-либо данными, чтобы это условие сработало.

Alines 13.02.2023 19:03
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то не может быть и 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". Это работает точно так же, как если бы вы использовали оператор ИЛИ в моем примере. Я добавил текстовый пример того, что мне нужно, чтобы ответить на мой вопрос. Посмотрите пожалуйста, может станет понятнее.

Alines 13.02.2023 19:46

Да. Это работает. Спасибо. Подскажите, пожалуйста, как сделать то же самое, но теперь использовать не слова, а переменную, например {{ attribute.text }}

Alines 14.02.2023 12:45

Вам все равно нужно будет сохранить значение attribute.text внутри массива words, просто замените 'Floor' на attribute.text, если эти два слова действительно находятся внутри attribute.text, вы просто используете if с проверкой in, а не if-elseif

DarkBee 14.02.2023 12:50

Другие вопросы по теме