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 相关文章推荐
让你的网站首页自动选择语言转跳
Dec 06 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
php去除重复字的实现代码
Sep 16 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
分享10段PHP常用代码
Nov 11 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
laravel框架创建授权策略实例分析
Nov 22 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处理postfix邮件内容的方法
2015/06/16 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
javascript实现数独解法
2015/03/14 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
如何写你的创业计划书
2014/01/07 职场文书
实习生求职自荐信
2014/02/07 职场文书
十八届三中全会感言
2014/03/10 职场文书
洗车工岗位职责
2014/03/15 职场文书
出生公证书
2015/01/23 职场文书
教师岗位职责
2015/02/03 职场文书
重阳节慰问信
2015/02/15 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python中的pprint模块
2021/11/27 Python
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python