无限级分类(上)

无限级分类

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

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

继续学习
||
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交重置代码
图片放大关闭