Сейчас загружается

Различия циклов в Twig

Различия циклов в Twig

чем отличается

{% for banner in banners|batch(items) %}

от

{% for banner in banners %}

Давайте разберем подробно.

1. {% for banner in banners %} (Простой цикл)

Это стандартный цикл, который вы знаете из большинства языков программирования.

  • Что делает: Последовательно перебирает каждый элемент массива banners один за другим.
  • Результат: На каждой итерации цикла в переменную banner попадает один объект из исходного массива.
  • Аналогия: Доставать яйца из коробки по одному.

Пример использования:
Обычно используется для построения списков, таблиц, галерей, где каждый элемент выводится отдельно.

twig

<ul>
    {% for banner in banners %}
        <li>{{ banner.title }}</li> {# Выведет заголовок каждого баннера #}
    {% endfor %}
</ul>

Вывод на экран:

html

<ul>
    <li>Акция недели</li>
    <li>Новая коллекция</li>
    <li>Бесплатная доставка</li>
</ul>

2. {% for banner in banners|batch(items) %} (Цикл с фильтром batch)

Это цикл, который работает с результатом фильтра batch.

  • Что делает batch(n): Этот фильтр разбивает исходный массив на подмассивы (группы), каждый из которых содержит до n элементов.
  • Результат: На каждой итерации цикла в переменную banner попадает не один объект, а массив из нескольких объектов (размером до n).
  • Аналогия: Сначала вы пакуете яйца в группы по 3 штуки в маленькие коробочки, а затем достаете уже эти маленькие коробочки.

Пример использования:
Идеально для создания сеток (grid), строк таблиц или каруселей, где нужно выводить несколько элементов в одной строке/блоке.

twig

{% set items_per_row = 3 %} {// Задаем, сколько элементов будет в одной группе #}
{% for group in banners|batch(items_per_row) %}
    <div class="row"> {// Открываем строку/контейнер для группы баннеров #}
        {% for banner in group %} {// ВЛОЖЕННЫЙ ЦИКЛ: перебираем уже каждый баннер в группе #}
            <div class="col">
                <img src="{{ banner.image }}" alt="{{ banner.title }}">
            </div>
        {% endfor %}
    </div> {// Закрываем строку #}
{% endfor %}

Предположим, banners содержит 5 элементов. Вывод на экран будет таким:

html

<!-- Первая группа (первые 3 баннера) -->
<div class="row">
<div class="col"><img src="banner1.jpg" alt="Акция недели"></div>
<div class="col"><img src="banner2.jpg" alt="Новая коллекция"></div>
<div class="col"><img src="banner3.jpg" alt="Бесплатная доставка"></div>
</div>

<!-- Вторая группа (оставшиеся 2 баннера) -->
<div class="row">
<div class="col"><img src="banner4.jpg" alt="Скидка 50%"></div>
<div class="col"><img src="banner5.jpg" alt="Распродажа"></div>
</div>

Сводная таблица различий

| Характеристика | {% for banner in banners %} | {% for group in banners|batch(3) %} |
| :— | :— | :— |
Тип переменной | Один объект banner | Массив group из нескольких объектов |
Цель | Перебрать все элементы подряд | Сгруппировать элементы для структурирования |
Итерация | По одному элементу | По группе элементов (подмассиву) |
Типичное применение | Списки, простые галереи | Сетки (grid), строки таблиц, карусели |
Необходимость во вложенном цикле | Нет | Да, чтобы перебрать элементы внутри группы |

Главный вывод

  • Используйте простой цикл (for...in), когда вам нужно обработать каждый элемент индивидуально.
  • Используйте цикл с batch (for...in...|batch(n)), когда вам нужно сгруппировать элементы для создания сложной структуры (например, несколько элементов в одной строке). Почти всегда после batch требуется вложенный цикл для перебора элементов внутри каждой группы.

Share this content:

1 комментарий

comments user
Комментатор WordPress

Привет! Это комментарий.
Чтобы начать модерировать, редактировать и удалять комментарии, перейдите на экран «Комментарии» в консоли.
Аватары авторов комментариев загружаются с сервиса Gravatar.

Отправить комментарий