ThinkPHP采用<volist>实现三级循环代码实例

本文以实例描述了ThinkPHP采用<volist>标签实现三级循环代码,具体操作步骤如下:

1. 三级循环需要三维数组,实现代码如下:

function MakeTree($pid,$level) {
 $map['pid'] = $pid;
$map['level'] = $level;
$result = $this->where($map)->order('rank ASC')->findall();
if($result){
 foreach ($result as $key => $value){
 $title = $value['alias'];
 $list[$title]['id'] = $value['id'];
 $list[$title]['pid'] = $value['pid'];
 $list[$title]['alias']= $value['alias'];
 $list[$title]['title'] = $value['title'];
 $list[$title]['level'] = $value['level'];
 $list[$title]['state'] = $value['state'];
 $list[$title]['rank'] = $value['rank'];
 if($value['level']<=3){
  $list[$title]['child'] = $this->_MakeSonTree($value['id']);
 }
 }
}
return $list;
} 

function _MakeSonTree($pid) {
$map['pid'] = $pid;
$result = $this->where($map)->order('rank ASC')->findall();
if($result){
 foreach ($result as $key => $value){
 $title = $value['alias'];
 $list[$title]['id']= $value['id'];
 $list[$title]['pid']= $value['pid'];
 $list[$title]['alias']= $value['alias'];
 $list[$title]['title'] = $value['title'];
 $list[$title]['level'] = $value['level'];
 $list[$title]['state'] = $value['state'];
 $list[$title]['rank'] = $value['rank'];
  if($this->haschild($value['id'])){  //先判断是否有第三级子类,最后的数组形如$result['child']['grandchild'];
  $list[$title]['grandchild']=$this->_MakeSonTree($value['id']);
  }
 }
}
return $list;
 } 

function haschild($id){
$result=D('LearningChannel')->where("pid=".$id)->find();
if($result){
 return true;
 }
 else return false;
}

2.绑定volist标签:

 $result=D('Learning') ->MakeTree(0,1);
 //dump($result);
 $this->assign('list',$result);

3.模板部分:

<select name="category" id="select" class="text mr5">
 <volist name="list" id="vo">
  <option name="cid" value="{$vo.id}" <eq name="vo.id" value="getid">selected</eq> >{$vo.alias}</option>
 <volist name="vo['child']" id="child">
  <option name="cid" value="{$child.id}" <eq name="child.id" value="getid">selected</eq> >--{$child.alias}</option>
  <volist name="child['grandchild']" id="grand">
  <option name="cid" value="{$grand.id}" <eq name="grand.id" value="getid">selected</eq> >---{$grand.alias}</option>
  </volist>
 </volist>
 </volist>
 </select>
(0)

相关推荐

  • thinkPHP的Html模板标签使用方法

    注意:在使用如<html:select />等标签之前,必须要引入TP的标签库:<tagLib name="html" /> 如果我们现在需要一个select下拉菜单项,那么在ThinkPHP中我们可以这样做. 1.在Action控制器的方法中获取数据,举例如下: 复制代码 代码如下: public function mylist(){ $user = new Model('User'); $list = $user->getField('id,usern

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

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

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

    本文较为详细的对ThinkPHP的volist标签嵌套的用法阐述如下: 首先,在Thinkphp开发手册中,有关于<volist>标签嵌套的解释说明.如下: 标签嵌套: 模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套. 系统内置的标签中,volist(及其别名iterate).switch.if.elseif.else.foreach.compare(包括所有的比较标签).(not)present.(not)empty.(not)defined等标签都可以嵌套使用.例如: &l

  • Thinkphp中volist标签mod控制一定记录的换行BUG解决方法

    本文实例讲述了Thinkphp中volist标签mod控制一定记录的换行BUG解决方法.分享给大家供大家参考.具体方法如下: 一.BUG描述: 存在于thinkphp 2.0 版本 Mod属性还用于控制一定记录的换行,例如: 复制代码 代码如下: <volist name="list" id="vo" mod="5" > {$vo.name} <eq name="mod" value="4"

  • ThinkPHP模板自定义标签使用方法

    使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms.phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据.以调用文章列表为例: dedecms可以写成: <ul> {dede:arclist row='10' orderby='id desc' titlelen=''} <li>[field:title]</li> {/dede:arclist} </ul> phpcms可以写成: <ul> {pc:c

  • Thinkphp中的volist标签用法简介

    通常volist标签多用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,对此可以直接使用volist标签进行输出. 在控制器中首先对模版赋值,如下例所示: $User = M('User'); $list = $User->limit(10)->select(); $this->assign('list',$list); 在模版定义如下,循环输出用户的编号和姓名: <volist name="list" id=&q

  • thinkPHP中volist标签用法示例

    本文实例讲述了thinkPHP中volist标签用法.分享给大家供大家参考,具体如下: 属性: name(必须) 要输出的数据模板变量 id(必须) 循环变量 offset(可选) 要输出数据的offset length(可选) 输出数据的长度 key(可选) 循环的key变量,默认值为i mod(可选) 对key值取模,默认为2 empty(可选) 如果数据为空显示的字符串 通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出. $User = M('Use

  • ThinkPHP模板IF标签用法详解

    ThinkPHP的IF标签可以用来定义复杂的条件判断,例如: <if condition="($name eq 1) OR ($name gt 100) "> value1 <elseif condition="$name eq 2" />value2 <else /> value3 </if> 注意:在condition属性中可以支持eq等判断表达式 ,同上面的比较标签,但是不支持带有">"

  • ThinkPHP模板Volist标签嵌套循环输出多维数组的方法

    本文实例讲述了ThinkPHP模板Volist标签嵌套循环输出多维数组的方法.分享给大家供大家参考,具体如下: ThinkPHP 中对 volist 标签嵌套使用可实现多维数组的输出. volist 嵌套使用 一般的二维数组,可以用 volist 标签直接循环输出.对于多维数组,则需要对其中的数组成员再次使用 volist 标签嵌套循环输出. 构建一个多维数组: $food = array(); $food[0]['fruits'][0]['fruits1'] = '苹果1'; $food[0]

  • ThinkPHP模板中判断volist循环的最后一条记录的验证方法

    对于用过smarty做过php开发的朋友来说,应该都知道在smarty模板里面判断foreach循环是否是最后一个可以用$smarty.foreach.name.last来判断循环是否到了最后一条记录,在thinkphp的模板中常见的循环是volist,但是volist的各种属性中并没有直接判断最后一条记录的属性,那么在thinkphp中如何判断呢?下面的代码可以实现ThinkPHP中volist断最后一条记录. 举例代码如下,读者可以自己去体会. <volist name='lists' id

随机推荐