无限级分类 增加
首先数据库字段要有id 。。。。parentid这些字段
如何做出这个样子呢,这就需要递归,控制器里面的add方面应该这样写
public function add(){
$pri=D("Privilege");
if(IS_POST){
if($pri->create()){
if($pri->add()){
$this->success("新增权限成功",U("lst"));
}else{
$this->error("新增权限失败");
}
}else {
$this->error($pri->getError());
}
return ;
}
$pris=$pri->pritree();
// dump($pris);
// die;
$this->assign("pris",$pris);
$this->display();
}$pris=$pri->pritree();这个函数在model层面里面写
public function pritree(){
$data=$this->select();
// dump($data);
// die;
return $this->resort($data);
}
public function resort($data,$parentid=0,$level=0){
static $ret=array();
foreach($data as $k => $v){
if($v["parentid"]==$parentid){
$v["level"]=$level;
$ret[]=$v;
$this->resort($data,$v["id"],$level+1);
}
}
return $ret;
}解释一下这两个函数是什么意思,第一个函数是找出改对象里面所有的数据
然后把数据传入递归函数里面,声明一个静态数组,循环语句
$v["parentid"]就是这个意思,找出等于0的子栏目,这些栏目都是顶级栏目,level代表是第几层,
然后存在ret这个数组里面,递归,最后返回这个数组,给add方法
$pris=$pri->pritree();
// dump($pris);
// die;
$this->assign("pris",$pris);
$this->display();赋值给前台前台输出
<volist name="pris" id="vo">
<option value="{$vo.id}"><?php echo str_repeat("-",$vo["level"]*2); ?>{$vo.priname}
</option>
</volist> 就能显示那种分层的感觉,str_repeat函数代表重复前台这样展示
<volist name="pris" id="vo">
<tr>
<td class="tc"><input name="ids[]" class="check" value="{$vo.id}" type="checkbox"></td>
<td>{$vo.id}</td>
<td>
<a target="_blank" href="#" title="">
<if condition="$vo["level"] neq 0">
|</if>
<?php echo str_repeat("-",$vo["level"]*2); ?>{$vo.priname}</a>
</td>
<td>{$vo.moname}</td>
<td>{$vo.coname}</td>
<td>{$vo.aname}</td>
<td>{$vo.parentid}</td>
<td>
<a class="link-update" href="__CONTROLLER__/edit/id/{$vo.id}">修改</a>
<a class="link-del" onclick="return confirm("确定要删除本权限及其子权限吗?");" href="__CONTROLLER__/del/id/{$vo.id}">删除</a>
</td>
</tr>
</volist>public function lst(){
$pri=D("Privilege");
$pris=$pri->pritree();
// dump($pris);
// die;
$this->assign("pris",$pris);
$this->display();
}就这样无限级分类的添加算是完成了
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Bootstrap内容分类使用方法(tab)
- 下一篇: nginx静态代理
