ThinkPHP采用实现三级循环代码实例
本文以实例描述了ThinkPHP采用<volist>标签实现三级循环代码,具体操作步骤如下:
1.三级循环需要三维数组,实现代码如下:
functionMakeTree($pid,$level){
$map['pid']=$pid;
$map['level']=$level;
$result=$this->where($map)->order('rankASC')->findall();
if($result){
foreach($resultas$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('rankASC')->findall();
if($result){
foreach($resultas$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;
}
functionhaschild($id){
$result=D('LearningChannel')->where("pid=".$id)->find();
if($result){
returntrue;
}
elsereturnfalse;
}
2.绑定volist标签:
$result=D('Learning')->MakeTree(0,1);
//dump($result);
$this->assign('list',$result);
3.模板部分:
<selectname="category"id="select"class="textmr5">
<volistname="list"id="vo">
<optionname="cid"value="{$vo.id}"<eqname="vo.id"value="getid">selected</eq>>{$vo.alias}</option>
<volistname="vo['child']"id="child">
<optionname="cid"value="{$child.id}"<eqname="child.id"value="getid">selected</eq>>--{$child.alias}</option>
<volistname="child['grandchild']"id="grand">
<optionname="cid"value="{$grand.id}"<eqname="grand.id"value="getid">selected</eq>>---{$grand.alias}</option>
</volist>
</volist>
</volist>
</select>