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)...{
returntrue;
}
elsereturnfalse;
}
2.绑定volist标签
$result=D('Learning') ->MakeTree(0,1);
//dump($result);
$this->assign('list',$result);
3.模板
<selectname="category"id="select"class="text mr5">
<volistname="list"id="vo">
<optionname="cid"value="{$vo.id}" <eq name="vo.id"value="getid">selected</eq> >{$vo.alias}</option>
<volistname="vo['child']"id="child">
<optionname="cid"value="{$child.id}" <eq name="child.id"value="getid">selected</eq> >--{$child.alias}</option>
<volistname="child['grandchild']"id="grand">
<optionname="cid"value="{$grand.id}" <eq name="grand.id"value="getid">selected</eq> >---{$grand.alias}</option>
</volist>
</volist>
</volist>
</select>