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

时间:2022-01-11 19:40:50

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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标签:

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

3.模板部分:

?
1
2
3
4
5
6
7
8
9
10
11
<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>