Lists 循环

lists 标签主要用于在模板中循环输出数据集或者多维数组。

普通输出

然后我们在模版中定义如下代码,循环输出名言标题和 IT 名人:

<lists name="list" id="vo">
    {$vo.title}  {$vo.people}
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    <?php echo $vo->title; ?>  <?php echo $vo->people; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

list 标签的 **name** 属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。**id** 表示当前的循环变量,可以随意指定,但确保不要和 name 属性冲突。

部分输出

支持输出部分数据,例如输出其中的第 2~4 条记录

<lists name="list" id="vo" offset="2" length='4'>
    {$vo.title} {$vo.people}
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = array_slice($list, 2, 4);
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    <?php echo $vo->title; ?> <?php echo $vo->people; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

输出偶数记录

lists 还支持按偶数输出,例如,我们在模板中写下如下的代码:

<lists name="list" id="vo" mod="2">
    <?php if ($mod == 1): ?>
        {$vo.title} {$vo.people}
    <?php endif; ?>
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    <?php if ($mod == 1): ?>
        <?php echo $vo->title; ?> <?php echo $vo->people; ?>
    <?php endif; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

输出奇数记录

lists 还支持奇数记录的输出:

<lists name="arrList" id="arrVo" mod="2">
    <?php if ($mod == 0) : ?>
        {$arrVo.title} {$arrVo.people}
    <?php endif; ?>
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    <?php if ($mod == 0): ?>
        <?php echo $vo->title; ?> <?php echo $vo->people; ?>
    <?php endif; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

奇数记录和偶数记录规定如下,我们以数组的 0 为开始,0、2、4为偶记录,其它的都为基数记录。

控制换行

mod 属性还用于控制一定记录的换行,例如:

<lists name="arrList" id="arrVo" mod="2">
    {$arrVo.title} {$arrVo.people}
    <?php if( $mod == 0 ) : ?>
        <br>
    <?php endif; ?>
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    <?php echo $vo->title; ?> <?php echo $vo->people; ?>
    <?php if ($mod == 0): ?>
        <br>
    <?php endif; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

输出循环变量

我们在模版中写下如下的代码:

<lists name="arrList" id="vo" index="k">
    {$k} {$vo.people}
</lists>

模板编译后的结果:

<?php if (is_array($list)):
    $k = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$k;
            $mod = $k % 2; ?>
    <?php echo $k; ?> <?php echo $vo->people; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

输出数组的索引

如果要输出数组的索引,可以直接使用 key 变量,和循环变量不同的是,这个 key 是由数据本身决定,而不是循环控制的,这个 key 可以通过 key 属性指定。

例如:

<lists name="arrList" id="vo">     
    key: {$key}
</lists>  

模板编译后的结果:

<?php if (is_array($list)):
    $index = 0;
    $tmp = $list;
    if (count($tmp) == 0):
        echo "";
    else:
        foreach ($tmp as $key => $vo):
            ++$index;
            $mod = $index % 2; ?>
    key: <?php echo $key; ?>
        <?php endforeach;
    endif;
else:
    echo "";
endif; ?>

大家看到没有,索引从 0 开始,而不是从 1 开始,这个是数组原始索引。