thinkphp3.2.3 无限极分类开发流程

无限极分类,几乎在每个网站都能用到,所以很重要。

1.设计表

thinkphp3.2.3 无限极分类开发流程_第1张图片


pid:表示当前分类的父 id,他是实现无限级分类的关键

无限级分类,主要从两个方面进行考虑的。

(1)数据库的设计,表中的 pid 字段。

(2)在程序的层面上,来完成,使用递归。

其实也就是 pid  就是他父亲的 id 一直到 pid 为 0 这就到了顶级分类


2. 添加分类

首先写入 Controller 层

(1)分类

public function information_cate_add(){
        if(IS_POST){
            /* 资讯分类 -> 分类添加详情 */ 
            $map['cate_title'] = I('cate_title');
            $map['cate_time'] = time();
            /* 资讯分类 -> 查询分类后台数据 */
            $ser = M('admin_information_cate') -> where(array('cate_title' => $map['cate_title'])) -> find();
            /* 资讯分类 -> 判断,存入数据库 */
            if($ser['cate_title'] == $map['cate_title']){
                die(json_encode(array('code'=>-1,'msg'=>'分类已存在')));
            }
            else if(!empty ($map['cate_title'])){
                M('admin_information_cate') -> add($map);
                die(json_encode(array('code'=>1,'msg'=>'添加成功')));
            }
            else{
                die(json_encode(array('code'=>-1,'msg'=>'请输入分类名称')));
            }
        }
        else{
            $this->display();
        }
    }
(2)子分类
public function cate_add(){
        if(IS_POST){
            $map['cate_title'] = I('cate_title');
            $map['cate_time'] = time();
            $map['pid'] = I('pid');
            $cate = M('admin_information_cate') -> where(array('cate_title'=>I('cate_title'))) -> find();
            if(!empty($cate)){
                die(json_encode(array('code'=>-1,'msg'=>'子类已存在')));
            }
            else if(!empty ($map)){
                M('admin_information_cate')->add($map);
                die(json_encode(array('code'=>1,'msg'=>'添加成功')));
            }else{
                die(json_encode(array('code'=>-1,'msg'=>'请输入子类名称')));
            }
        }
        else{
            $row = M('admin_information_cate') -> where(array('id'=>I('id'))) -> find();
            $this->assign('row',$row);
            $this->display();
        }
    }


最后在写入 View 层

(1)分类

(2)子分类

3.功能显示

首先方法写在function.php中

//无限极分类 生成树形数组
function make_tree($list,$root=0){
    $tree=array();
    $packData=array();
    //将所有的分类id作为数组key
    foreach ($list as $k=>$v) {
        $packData[$v['id']] = $v;
    }
    //利用引用,将每个分类添加到父类child数组中,这样一次遍历即可形成树形结构。
    foreach ($packData as $key =>$val){
        if($val['pid']==$root){//代表跟节点
            $tree[] = &$packData[$key];
        }else{
            //找到其父类
            $packData[$val['pid']]['child'][] = &$packData[$key];
        }
    }
    return $tree;
}

然后是写入 Controller 层

(1)递归调用
 public function show_tree($data,$flag=''){
        static $str = '';                           //静态变量 只有第一次才初始化
        foreach($data as $k=>$v){
            if(empty($v['child'])){
                $str .= "";
            }else{
                $str .= "";
                $this->show_tree($v['child'],$flag.'--|  ');
            }
        }
        return $str;
    }
(2)添加时显示分类
 public function information_add(){
            $information = M("admin_information_cate")->select();
            $information = make_tree($information);
            $cate_str = $this->show_tree($information, '');
            $this->assign('information', $cate_str);
            $this->display();
    }
最后在写入 View 层

4.最终显示


thinkphp3.2.3 无限极分类开发流程_第2张图片thinkphp3.2.3 无限极分类开发流程_第3张图片

5.总结

    关于无限极分类的理解就上面这些了,自测没有问题,写的比较简单,方便大家理解,有问题欢迎一起来探讨。

你可能感兴趣的:(thinkphp3.2.3)