Template Toolkit - 渲染不同行中相同循环的范围

时间:2012-08-07 08:07:51

标签: loops foreach row range 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中完成此任务,但是任何显示该想法背后逻辑的方法都将受到赞赏!

干杯,W。

1 个答案:

答案 0 :(得分:3)

我会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>