Показать сообщение отдельно
  #29 (permalink)  
Старый 03.12.2019, 23:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Триви, просто проверяйте тип:

{% for product in products %}
    {% if product is iterable %}
        {% for item in product %}
            {{ item }}
        {% endfor %}
    {% else %}
        {{ product }} 
    {% endif %}
{% endfor %}


Если охота проверять ключи, то конечно не таким образом if item.name, ибо это проверка его значения на true/false. Непосредственно перебрать ключи/значения вы не сможете так как у вас массив вложенный, а если его структура будет такой (сокращено):

$arr = [
    'product_id' => 30,
    'thumb' => 'https://mysite/image/cache/catalog/demo/canon_eos_5d_1-200x200.jpg',
    'name' => 'Canon EOS 5D',
    'model' => 'Product 3',
    'description' => 'Canon press material for the EOS 5D',
    'price' => '50.00р',
    'special' => '80.00р',
    'options' => [
        'product_option_id' => 226,
        'product_option_value' => [
            [
                'product_option_value_id' => 15,
                'option_value_id' => 39,
                'name' => 'Red'
            ],
            [
                'product_option_value_id' => 17,
                'option_value_id' => 41,
                'name' => 'Green'
            ],
            [
                'product_option_value_id' => 16,
                'option_value_id' => 42,
                'name' => 'Yellow'
            ]
        ],
        'option_id' => 5,
        'name' => 'Select',
        'type' => 'select',
        'required' => 1
    ],
    'href' => 'https://soniya-shop/index.php?route=product/product&product_id=30'
];


то можно проверять текущий ключ (для примера проверяется и ключ 'href', чтобы не экранировать &):

<ul>
{% for key, val in arr %}
    {% if key == 'options' %}
        <ul>
            {% for k, v in val %}
                {% if k == 'product_option_value' %}
                    <ul>
                        <li>{{ v }} опять вложение, цикл</li>
                    </ul>
                {% else %}
                    <li>{{ v }}</li>
                {% endif %}
            {% endfor %}
        </ul>
    {% else %}
        <li>{% if key == 'href' %}{{ val|raw }}{% else %}{{ val }}{% endif %}</li>
    {% endif %}
{% endfor %}
</ul>


Хотя зная структуру массива проще проверять является ли значение итерируемым и соответственно поступать. Проверка ключа потребуется, например, если каждый из них будет иметь различный вывод.

Последний раз редактировалось laimas, 04.12.2019 в 00:49.
Ответить с цитированием