无限级分类 增加
首先数据库字段要有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静态代理