夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)

我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改:

我们先将add方法里面的数据查出来再说:

 

然后在模板页进行遍历:

 

展示效果如下所示:

 

虽然是出现了,但是没有向我们平常时候见到的无限极分类一样噢,一般比如分类 多多,分类下面的 好多美女啊 是多多的下级分类,那么好多美女啊他前面是有几个空格之类的隔开,

那么我们就需要在model层里面对她进行排序的设置了:

 

<?php
    namespace Admin\Model;
    use Think\Model;
    class CategoryModel extends Model{
        protected $_validate = array(
            //array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
            array('cate_name','require','栏目中文名不能为空!',1,'regex',3), //默认情况下用正则进行验证,
            //这里的1是必须验证
            //regex正则验证,定义的验证规则是一个正则表达式(默认)
            //3全部情况下验证
            array('cate_ename','require','栏目英文名不能为空!'), //默认情况下用正则进行验证
        );
        
         //定义一个方法,获取树状的分类信息
        public function catTree(){
            $cats = $this->select();
            //通过tree里面的方法进行排序
            return $this->tree($cats);
        }
        
        public function tree($arr,$pid=0,$level=0){ //$level是自己定义出来的
            static $tree = array();
            foreach($arr as $v){
                if($v['cate_pid']==$pid){
                    //说明找到,保存
                    $v['level'] = $level;
                    $tree[] = $v;
                    //继续找
                    $this -> tree($arr,$v['cate_id'],$level+1); //这里的cate_id表的id
                }
            }
            return $tree;
        }
    }

 

 

然后我们回到控制器:

 

public function add(){
        $cmod = D('Category');
        if(IS_POST){
            $data['cate_name'] = I('cate_name');
            $data['cate_ename'] = I('cate_ename');
            $data['cate_keywords'] = I('cate_keywords');
            $data['cate_desc'] = I('cate_desc');
            $data['cate_type'] = I('cate_type');
            $data['cate_pid'] = I('cate_pid');
            $data['cate_content'] = I('cate_content');
            if($_FILES['cate_pic']['tmp_name']!=''){
                $upload = new \Think\Upload();// 实例化上传类
                $upload->maxSize   = 3145728 ;// 设置附件上传大小
                $upload->exts      = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
                $upload->rootPath  = './';  //这个一定要加否则很容易中招
                $upload->savePath  =      'Public/Uploads/'; // 设置附件上传目录
                $info   =   $upload->uploadOne($_FILES['cate_pic']);
                if($info){
                    //这里组装sql语句,让图片融入$data['pic']里面
                    $data['cate_pic'] = $info['savepath'].$info['savename'];
                }else{
                    $this->error($upload->getError());
                }
            }
            //dump($_FILES);
                
            if($cmod->create($data)){
                if($cmod->add()){
                    $this->success('添加栏目成功',U('Category/lists'));
                }else{
                    $this ->error('添加栏目失败');
                }
            }else{
                $this -> error($cmod->getError());
            }
            
            return;
        }

 

 

然后用我们的大 D方法直接调用catTree 函数即可,然后我们回到视图里面:

 

<select name="cate_pid" id="catid" class="required">
                                    <option value="">顶级分类</option>
                                <volist name="cateres" id="vo">
                                    <option value="{$vo['cate_id']}">{$vo['level']|str_repeat="&nbsp;&nbsp;&nbsp;",###} {$vo['cate_name']}</option>
                                </volist>
                                    
                                </select>

 

 

这样即可正常隔开, $vo['level'] 也就是我们从Model层里面定义的,不过让他出来用nbsp 来进行张位而已,最终显示效果如下所示:

posted @ 2016-04-23 18:01  夺命雷公狗  阅读(352)  评论(0编辑  收藏  举报