牛骨文教育服务平台(让学习变的简单)
博文笔记

无限级分类 增加

创建时间:2017-04-10 投稿人: 浏览次数:322

首先数据库字段要有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();
    }

就这样无限级分类的添加算是完成了

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。