本文以实例描述了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>
|