Thinkphp的volist标签嵌套循环使用教程


Posted in PHP onJuly 08, 2014

本文较为详细的对ThinkPHP的volist标签嵌套的用法阐述如下:

首先,在Thinkphp开发手册中,有关于<volist>标签嵌套的解释说明。如下:

标签嵌套:

模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套。
系统内置的标签中,volist(及其别名iterate)、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。例如:

<volist name="list" id="vo">
<volist name="vo['sub']" id="sub">
{$sub.name}
</volist>
</volist>

上面的标签可以用于输出双重循环。

默认的嵌套层次是3级,所以嵌套层次不能超过3层,如果需要更多的层次可以指定TAG_NESTED_LEVEL配置参数。
但是在Action中具体应该怎样赋值“list”呢?从说明中可以看出,list应该是一个二维数组,下边是一段测试代码,经测试可以使用。

$Baojia=new Model('baojia');
$Class=new Model('class');
$parent=$Class->select();   
foreach($parent as $n=> $val){
$parent[$n]['voo']=$Baojia->where('belongto=\''.$val['name'].'\'')->select();
}
$this->assign('list',$parent);
<volist name="list" id="vo">
    {$vo.name}<BR>
<volist name="vo['voo']" id="sub">
 {$sub.name}
</volist><BR>
</volist>

数据库中定义了两个表,一个是报价表,一个是分类表,实现的功能是像树形菜单一样,显示分类,每个分类下边是各个型号的报价。

代码主要功能是:

1.首先创建模型:

$Baojia=new Model('baojia');
$Class=new Model('class');

2.然后查询分类中的数据,这一步非常重要,因为我们知道,数据库查询返回的是类似表格的二维形式的数据,当我们取出单条数据时,相当与读取每行数据。当调用<volist>时,thinkphp后台会自动读取每一行数据。

$parent=$Class->select();

将报价中的数据存入$parent中,其中$n是$parent数组的序号,也就相当于存入$parent中的数据表,每行添加一个索引,这个索引指向属于这个分类的报价。

foreach($parent as $n=> $val){
$parent[$n]['voo']=$Baojia->where('belongto=\''.$val['name'].'\'')->select();   
}

3.最后:

$this->assign('list',$parent);

显示输出!

通过这个程序,可以更深入的理解<volist>标签,其实如果在数据库操作中,<volist>标签的name只能assign 成数据库表类型(当然也可以是数组型,因为数据库查询得到的数据本身就是数组型的),当我们在视图页面调用<volist>标签时,特别是嵌套调用时,始终记住每一层的name都必须是数组型的,像本程序中,最外层,<volist name="list" id="vo">这里的list就是我们最初定义的$parent,这个变量指向查询class表得到的数据表,里层<volist name="vo['voo']" id="sub">,也就是$parent[$n]['voo']所指向的数据表,也就是报价表中的相应数据。

通过这样的分析,条理已经很清晰了,举一反三就可以实现N重循环,当然如果需要更多的层次可以指定TAG_NESTED_LEVEL配置参数。

这样的话,就可以实现例如:国家->省->市->县->乡镇等多重循环

PHP 相关文章推荐
PHP中的extract的作用分析
Apr 09 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php输出xml必须header的解决方法
Oct 17 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php读取文件内容的方法汇总
Jan 24 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 #PHP
PHP的error_reporting错误级别变量对照表
Jul 08 #PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 #PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 #PHP
PHP生成短网址的3种方法代码实例
Jul 08 #PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 #PHP
php中函数前加&amp;符号的作用分解
Jul 08 #PHP
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
javascript实现异形滚动轮播
2019/11/28 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python中的自定义函数学习笔记
2014/09/23 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python双向循环链表实现方法分析
2018/07/30 Python
Django实现表单验证
2018/09/08 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
如何利用Python 进行边缘检测
2020/10/14 Python
Django缓存Cache使用详解
2020/11/30 Python
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
家具促销活动方案
2014/02/16 职场文书
经典广告词大全
2014/03/14 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
个人先进事迹总结
2015/02/26 职场文书
语文教师求职信范文
2015/03/20 职场文书
药品开票员岗位职责
2015/04/15 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书