无限级分类(上)

无限级分类

2931721519-561aa0fe8bba4_articlex.png

什么是无限级分类:

无限极分类说简单点就是一个类可以分成一个分子类,然后一个子类又可以分另一个子类这样无限分下去,就是好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一个文件夹。

public function index(){
        $cate=D('cate');
        $cateres=$cate->catetree();
        $this->assign('cateres',$cateres);
        $this->display();
    }

先在index控制器编写模版,$cateres调用catetree()方法。

catetree()方法写在分类模型层如下

<?php
namespace Admin\Model;
use Think\Model;
class CateModel extends Model {

    protected $_validate = array(
      array('catename','require','管理员名称不得为空!',1),
    );


    public function catetree(){
        $data=$this->order('id desc')->select();
        return $this->resort($data);
    }

    public function resort($data,$pid=0,$level=0){
        static $arr=array();
        foreach ($data as $k => $v) {
            if ($v['pid']==$pid) {
                $v['level']=$level;
                $arr[]=$v;
                $this->resort($data,$v['id'],$level+1);
            }
        }
        return $arr;
    }

}

下面我们来依次讲解如何实现。

catetree方法

获取数据,$this的意思是调用自身来查询,使用id来进行排序。return返回查询出来的结果。

resort方法
$data:获取的数据

$pid=0:顶级分类0开始

$level=0 分类级别

先创建一个空数组用来存放数据,foreach来遍历,如果$v['pid']==$pid意思是顶级id的话,那么$v['level']=$level也是顶级分类,讲查询的数据存放到数组中,接下来继续调用自身$this->resort($data,$v['id'],$level+1);  这里$data等于$data   $v['id']等于$pid,$level+1代表$level每次加1。查出来的结果如下、

QQ截图20170623144118.png

我们继续添加几个来查看

QQ截图20170623144430.png

这就是我们的无限级分类的简单原理。

继续学习
||
<?php namespace Admin\Model; use Think\Model; class CateModel extends Model { protected $_validate = array( array('catename','require','管理员名称不得为空!',1), ); public function catetree(){ $data=$this->order('id desc')->select(); return $this->resort($data); } public function resort($data,$pid=0,$level=0){ static $arr=array(); foreach ($data as $k => $v) { if ($v['pid']==$pid) { $v['level']=$level; $arr[]=$v; $this->resort($data,$v['id'],$level+1); } } return $arr; } }
提交重置代码