Различия циклов в 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 комментарий