smarty循环嵌套之几个实例详

利用foreach

smarty中section的嵌套用法,再用Smarty的循环foreach做个嵌套循环实例.

两个方法都很简单,关键是要构造好多维数组,然后循环的时候把相应的键名进行引用。。。是不是说得很模糊,看例子吧,不好解析,例子直观好看,先来看数组,引用原来文章的:

 代码如下 复制代码
$query = "SELECT id,name,name_cn FROM di_flag ORDER BY id desc";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
$query2="SELECT id, name, name_cn,flag
FROM di_sort
WHERE di_sort.flag =$row[id]
ORDER BY id desc";
$result2=mysql_query($query2);
while($row2 = mysql_fetch_array($result2))
{
$post[]=array('sid'=>$row2['id'],
'sortname'=>$row2['name'],
);
}
$row_array[] = array('cid'=>$row['id'],
‘cat_name'=>$row['name'],
‘topic'=>$post
);
unset($post);
}
$smarty->assign("forum",$row_array);
unset($row_array);

很简单,以上是一个二维数组,然后再看如何嵌套循环,这回用foreach咯,看代码:

 代码如下 复制代码

{foreach from=$forum ietm=value}
         {$value.cat_name}
         {foreach from=$value.topic ietm=value2}

利用section循环

一、PHP处理文件输出三维数组代码如下:

 代码如下 复制代码
 $brand_spaces = array();
 foreach ($category AS $key => $value)
 {
 $condition = ' AND B.`regionid` = '.$regions->regionid.' AND M.`levelid` = 1 AND B.`categoryid` =' .$value['categoryid'].' AND B.`ischecked` = 1';
 //$resourceid = $value['categoryid'];
 $brand = $brandspaces->FetchByCondition('5',$condition,'B.`sort` asc');
 $brand_spaces[] = $brand;
 }
 //print_r($brand_spaces);
 $smarty->assign('brand_spaces',$brand_spaces);

通过foreach循环查询符合条件的结果集,重组数组。

二、处理文件print_r输出的三维数组结果显示如下:

 代码如下 复制代码
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 85
                    [id] => 85                  
                    [15] => php教程
                    [categoryname] => php教程
                    [16] => /u/342/logo/logo342.jpg
                    [logo] => /u/342/logo/logo342.jpg                   
                    [18] => php教程示例一
                    [title] => php教程示例一                   
                )
            [1] => Array
                (
                    [0] => 410
                    [id] => 410                   
                    [15] => php教程
                    [categoryname] => php教程
                    [16] => /u/398/logo/logo398.jpg
                    [logo] => /u/398/logo/logo398.jpg                   
                    [18] => mysql数据库优化
                    [title] => mysql数据库优化                   
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => 9
                    [id] => 9                   
                    [15] => SEO优化
                    [categoryname] => SEO优化
                    [16] => /u/228/logo/logo228.gif
                    [logo] => /u/228/logo/logo228.gif                   
                    [18] => seo/seo.html" target="_blank">搜索引擎优化技巧
                    [title] => 搜索引擎优化技巧                  
                )
            [1] => Array
                (
                    [0] => 494
                    [id] => 494                  
                    [15] => SEO优化
                    [categoryname] => SEO优化
                    [16] => /u/453/logo/logo453.gif
                    [logo] => /u/453/logo/logo453.gif                   
                    [18] => seo优化几大注意点
                    [title] => seo优化几大注意点                   
                )
        )
)

三、在模板文件通过smarty的section嵌套循环详细分析:

 代码如下 复制代码
<!--{section name=index loop=$brand_spaces}--> 
         <div class="channel_i">
             <a href="#" title="" class="leftF"><div><!--{$brand_spaces[index][0].categoryname}--></div></a>            
             <!--{section name=customer loop=$brand_spaces[index]}-->
                <div class="brands_i">
                  <span class="pic_logo"><a href="#" title="#"><img src="<!--{$brand_spaces[index][customer].logo}-->" alt="#" width="109" height="60" /></a></span>
                    <p><a href="#"><!--{$brand_spaces[index][customer].title}--></a></p>
                </div>
              <!--{/section}-->               
            </div>    
<!--{/section}-->   

 
1、$brand_spaces为assign名称,$brand_spaces 的长度为2,所以将loop=$brand_spaces与loop=2最后结果是一样的。loop为"决定循环次数的变量名称".
2、<!--{$brand_spaces[index][0].categoryname}-->获取到三维数组最外层的循环并得到[categoryname]的value值
3、$brand_spaces[index]分解开为:$brand_spaces[1]和$brand_spaces[2]。
4、下面这个<!--{$brand_spaces[index][customer].logo}-->为获取到[logo]的value的值。
如果觉得上面的看不是很明显,为了便于理解,你也可以设一个变量:$brand=$brand_spaces[index];
即section内部循环为:<!--{section name=customer loop=$brand}-->
即获取[logo]的值为 <!--{$brand[customer].logo}-->,这和平常我们写的section一次循环一样,就很好理解了。

时间: 2024-10-29 17:33:55

smarty循环嵌套之几个实例详的相关文章

smarty循环嵌套用法示例分析

本文实例讲述了smarty循环嵌套用法.分享给大家供大家参考,具体如下: test3.php: <?php require "main.php"; $forum = array( array("category_id" => 1, "category_name" => "公告区", "topic" => array( array("topic_id" =>

ThinkPHP模板循环输出Volist标签用法实例详解_php实例

本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如下: volist 标签用于在模板中循环输出数据集或者多维数组. volist 标签 在模块操作中,select() 方法返回的是一个二维数组,可以用 volist 直接输出: <volist name="list" id="vo"> 用 户 名:{$vo['username']}<br /> 电子邮件:{$vo['email']}<br /&g

Zend Framework+smarty用法实例详解_php实例

本文实例讲述了Zend Framework+smarty用法.分享给大家供大家参考,具体如下: 一.Zend Framework简介 Zend Framework使用模型-视图-控制器(Model-View-Controller(MVC))结构.这个用来把你的程序分离成不同部分使得开发和维护变得容易. 运行Zend Framework需要:PHP 5.1.4 (或更高) .Web 服务器支持 mod_rewrite功能,本实例采用Apache. 从这里http://framework.zend.

SQL Server 树形表非循环递归查询的实例详解_MsSql

很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例. --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id ) SELECT Area FROM TREE --通过父节点查询子节点 WIT

SQL Server 树形表非循环递归查询的实例详解

很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例. --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id ) SELECT Area FROM TREE --通过父节点查询子节点 WIT

Android Adapter里面嵌套ListView实例详解

Android Adapter里面嵌套ListView实例详解 前言: 可嵌套~但是显示需要特殊处理下~以下是处理方法 前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题.上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的Scr

SQLserver中cube:多维数据集实例详解

1.cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with 关键字连接 with cube 根据需要使用union all 拼接 判断 某一列的null值来自源数据还是 cube 使用GROUPING关键字 GROUPING([档案号]) = 1 : null值来自cube(代表所有的档案号) GROUPING([档案号]) = 0 : null值来自源数据 举例: SELECT * INTO ##GET FROM (SELECT * FROM ( SELECT CASE WHEN

Android 音乐播放器的开发实例详解_Android

   本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的快进快退等.        先欣赏下本实例完成后运行的界面效果:         首先我们建立项目,我使用的SDK是Android2.2的,然后在XML中进行布局.        上方是一个ListView用来显示我们的音乐列表,中间是一个SeekBar可以拖动当前音乐的播放进度,之所以用Se

Yii CGridView用法实例详解_php实例

本文实例讲述了Yii CGridView用法.分享给大家供大家参考,具体如下: CGridView的功能是用来显示的数据列表.它支持排序,分页,和AJAX数据请求. CGridView最好使用 data provider,最好是 CActiveDataProvider . 简单代码如下: $dataProvider=new CActiveDataProvider('Post'); $this->widget('zii.widgets.grid.CGridView', array( 'dataPr