在smarty模板系统中使用“循环”?

时间:2014-10-24 22:17:02

标签: php smarty

这是我目前的代码:

{foreach from=$items item=item name=utable}

{foreach from=$item.terms item=tmp name=titem}
<tr class="{cycle values="odd,even"}">

REMOVED UNNECESSARY CODE FROM HERE

{/foreach}
{/foreach}

oddeven正在为tr类正确旋转。

但是,每次新表都不会重新开始旋转。例如,我希望每个表的第一个tr都包含类odd,但如果最后一个表以odd结尾,则下一个表继续以even开头

有没有办法让它在每个表的末尾停止并在下一个表重新启动?

1 个答案:

答案 0 :(得分:1)

您需要将reset属性与print一起使用。

示例PHP数据:

$data = [1 => [2,3,51], 2 => [5,6,1], 4 => [1,2,21]];
$smarty->assign('tables',$data);

示例Smarty文件:

<style>
    tr.odd {
        background: red;
    }
    tr.even {
        background: #fff;
    }
    table {
        margin: 50px 0;
    }
</style>


{foreach $tables as $table}
    {cycle values="" reset=true print=false}
    <table>
        {foreach $table as $row}
        <tr class="{cycle values="odd,even"}">
            <td>
                {$row}
                </td>
        {/foreach}
    </table>
{/foreach}

作为替代方案,您也可以这样做:

{foreach $tables as $table}
    <table>
        {foreach $table as $row}
        {if $row@first}{assign var="reset" value=true}{/if}
        <tr class="{cycle values="odd,even" reset=$reset}">
            <td>
                {$row}
                </td>
         {assign var="reset" value=false}
        {/foreach}
    </table>
{/foreach}