1

我正在尝试获取一个模板工具包 [% 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.

4

1 回答 1

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>
于 2012-08-07T08:34:44.887 回答