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