Я пытаюсь заставить цикл Template Toolkit [% FOREACH %] разделить и отобразить элементы в определенном диапазоне в разные строки.
Что у меня есть до сих пор:
<ul>
<ul class="row-top">
[% FOREACH news IN newsfeeds %]
[% IF loop.index() < 3 %]
[% INCLUDE content_news/news_item.tt %]
[% END %]
[% END %]
</ul>
[% FOREACH news IN newsfeeds %]
[% IF loop.index() > 3 %]
[% INCLUDE content_news/news_item.tt %]
[% END %]
[% END %]
</ul>
Вывод на данный момент (правильно получил первую строку):
<ul>
<ul class="row-top">
<li class="item featured"></li>
<li class="item"></li>
<li class="item last"></li>
</ul>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
Идеальная выходная разметка:
<ul class="top-row">
<li class="item featured"></li>
<li class="item"></li>
<li class="item last"></li>
</ul>
<ul class="row">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item last"></li>
</ul>
<ul class="row">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item last"></li>
</ul>
<ul class="row">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item last"></li>
</ul>
Ситуация:
Поскольку элементы списка могут иметь разную высоту, они не могут просто перемещаться влево. Их нужно отображать в разных строках. Цикл foreach должен открывать и закрывать теги, как показано в разметке выше.
Поскольку рекомендуемый элемент в два раза шире элемента по умолчанию (например, сетка из 4 столбцов), в первой строке (.top-row) всего три элемента.
Все это желательно рендерить из одного и того же цикла foreach, так как данные поступают из одного источника.
Намерение состоит в том, чтобы сделать это в Template Toolkit, но любой метод, который показывает логику этой идеи, будет оценен по достоинству!
Ура, В.