php Smarty模板重复块儿区域foreach

在Smarty模板中,可以使用forach和section两种方式重复一个区块。

foreach标记作用与PHP中的作用相同,但它们的使用语法大不相同。

在模板中{foreach}必须和{/foreach}成对使用,它有四个参数如下:

from:待循环数组的名称,决定循环的次数,必要参数

item:确定当前元素的变量名称,必要参数

key:当前处理元素的键名,可选参数。

name:循环的名称,用于访问循环,这个名称是任意的,可选参数。

在模板中可以嵌套使用foreach遍历二维数组,但是必须保证嵌套中的foreach名称唯一。

在使用foreach遍历数组时与下标无关,所以在模板中关联数组和索引数组都可以使用foreach遍历。

在Smarty模板中还为foreach标记提供了一个扩展标记foreachelse,这个语句在from变量没有值的时候被执行,一定要与foreach一起使用而且foreachelse没有结束标记,嵌套在foreach中。

实例:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf8">
        <title>
            {* 简单变量*}
            {$title}
        </title>
    </head>
    <body>
        <table>
            {* 简单数组的遍历*}    
            {foreach from=$simpleArray item=v key=k}
                <tr>
                    <td>
                        {$k}=>{$v},k + v = {$k + $v}
                    </td>
                </tr>
            {/foreach}
        </table>
        <table>
            {* 二维数组(索引数组与关联数组混合)嵌套遍历*}
            {foreach from=$complexArray item=row}
                <tr>
                    {foreach from=$row item=col key=k}
                        {* 注意if语句与小括号(不是必须的)之间的空格,有严格的要求*}
                        <td {if ($col == 'wjj') }style='color:red;'{elseif ($col == 'qxy')}style='color:green;'{/if}>{$k}:{$col}</td>
                    {/foreach}
                </tr>
                {foreachelse}
                    <tr><td>没有数据啊</td></tr>
            {/foreach}
            
            {* 二维数组(索引数组与关联数组混合)遍历,注意关联数组的访问方式*}
            {foreach from=$complexArray item=row}
                <tr>
                    <td>name:{$row.name}</td>
                    <td>age:{$row.age}</td>
                </tr>
            {/foreach}
            
            {* 索引数组与关联数组混合,注意访问方式*}
            <tr>
                <td>name:{$complexArray[0].name}</td>
                <td>age:{$complexArray[0].age}</td>
            </tr>
            <tr>
                <td>name:{$complexArray[1].name}</td>
                <td>age:{$complexArray[1].age}</td>
            </tr>
            
            {* 数组(对象)嵌套遍历,注意:经过测试对象的属性必须是public*}
            {foreach from=$objectArray item=row key=k}
                <tr>
                    {foreach from=$row item=v key=k}
                    <td>{$k}:{$v}</td>
                    {/foreach}
                </tr>
            {/foreach}
            
            {* 对象遍历,注意对象的访问方式*}
            {foreach from=$objectArray item=row key=k}
                <tr>
                    <td>name:{$row->name}</td>
                    <td>age:{$row->age}</td>
                </tr>
            {/foreach}
            
            {* 索引数组与对象混合,注意访问方式*}
            <tr>
                <td>name:{$objectArray[0]->name}</td>
                <td>name:{$objectArray[0]->age}</td>
            </tr>
            <tr>
                <td>name:{$objectArray[1]->name}</td>
                <td>name:{$objectArray[1]->age}</td>
            </tr>
        </table>
        {* 引用子模板,子模板中有个$otherTpl变量*}
        {include "example3.htm"}
    </body>
</html>

程序为模板变量赋值为如下数组:

$p1 = new People('wjj','保密');
$p2 = new People('qxy','好像比我小');

array(

    'title' => 'example2',
    'simpleArray' => array(1,2,3,4,5,6),
    'complexArray' => array(
         array('name' => 'wjj','age' => '保密'),
         array('name' => 'qxy','age' => '好像比我小')
     ),
     'objectArray' => array($p1,$p2),
     'otherTpl' => '我是:example3模板'
);
输出一个表格,内容如下:

0=>1,k + v = 1
1=>2,k + v = 3
2=>3,k + v = 5
3=>4,k + v = 7
4=>5,k + v = 9
5=>6,k + v = 11
name:wjjage:保密
name:qxyage:好像比我小
name:wjjage:保密
name:qxyage:好像比我小
name:wjjage:保密
name:qxyage:好像比我小
name:wjjage:保密
name:qxyage:好像比我小
name:wjjage:保密
name:qxyage:好像比我小
name:wjjname:保密
name:qxyname:好像比我小
我是:example3模板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值