Template Toolkit - Отрисовка диапазонов одного и того же цикла в разных строках

Я пытаюсь заставить цикл 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, но любой метод, который показывает логику этой идеи, будет оценен по достоинству!

Ура, В.


person Wallace Sidhrée    schedule 07.08.2012    source источник


Ответы (1)


Я бы slice список:

[% featured_items = newsfeeds.slice(0,2) %]
[% normal_items  = newsfeeds.slice(3) %]

<ul class="row-top">
    [% FOREACH news IN featured_items %]
        [% INCLUDE content_news/news_item.tt %]
    [% END %]
</ul>
<ul class="row">
    [% FOREACH news IN normal_items %]
        [% INCLUDE content_news/news_item.tt %]
        [% IF ( loop.count % 4 ) == 0 %]</ul><ul class="row>[%END%]
    [% END %]
</ul>
person Jonas G. Drange    schedule 07.08.2012
comment
Работал как шарм! Здоровья Джей! - person Wallace Sidhrée; 07.08.2012