码迷,mamicode.com
首页 > 其他好文 > 详细

2、后台分类页-多级分类列表

时间:2017-02-05 12:25:47      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:接收   返回   pac   测试   /var   思想   res   方便   pre   

分类中会出现一些分类属于另一分类,也就是子分类现象,为了在页面更好的展现这层隶属关系,我们需要优化一下

在数据表blog_catagory中插入一些新数据

技术分享

思路:

将之前获得的数据进行筛选,如果cate_pid为0则代表该元组为父级分类,为其他的数据说明就是对应cate_id下的子分类。

为了之后的调用方便,定义传入的参数

1、数据的处理放到Category.php模型中,只需要给控制器返回数据结果。

 1 <?php
 2 
 3 namespace App\Http\Model;
 4 
 5 use Illuminate\Database\Eloquent\Model;
 6 
 7 class Category extends Model
 8 {
 9     protected $table = ‘category‘;
10     protected $primaryKey = ‘cate_id‘;
11     public $timestamps=false;
12 
13     public function tree()
14     {
15         $categorys = $this->all();//获取blog_category表数据信息
16         //dd($categorys); //测试打印获得的数据
17         return $data=$this->getTree($categorys,‘cate_name‘,‘cate_id‘,‘cate_pid‘);
18     }
19 
20 
21 //重新整合数据,使得子分类在父级分类之后
22      public function getTree($data,$field_name,$field_id=‘id‘,$field_pid=‘pid‘,$pid=0)
23     {
24         //dd($data);
25         $result=array(); //定义一个空数组,用于接收符合条件的对象,也可以$resullt=[]
26         foreach($data as $k=>$v)
27        {    
28             //print $k." value: ".$v."<br/>";//此时输出是以json格式输出
29             //var_dump($v); 查看数据类型是对象
30             //jsn_decode()函数用于对json格式的字符串进行解码,转化为php变量,assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象
31             //$v=json_decode($v,true);数组,自己的错误思想,不需要返回数组类型
32             
33             if($v->$field_pid==0){
34                 //$v=json_decode($v,true);
35                 //dd($v);
36                 $v["_".$field_name]=$v[$field_name]; //定义一个新的字段,如果为父级分类则是源数据内容,如果是子集分类,则加上一些标识,在视图中使用新的字段输出
37                 $result[]=$v;//将符合的对象压入数组中
38 
39                 //二次循环,判断是否有子集分类,如果有,则压入父级分类的后面
40                 foreach($data as $k1=>$v1)
41                 {
42                     if($v1->$field_pid==$v[$field_id]){
43                         $v1["_".$field_name]="|--- ".$v1[$field_name];
44                         $result[]=$v1;
45                     }                
46                 }
47             }
48         }
49 
50          return $result;
51     }
52 }

2、修改控制器CategoryController.php,调用tree()方法

错误调用:

$data=Category::tree();用类名称调用方法,此方法必须为静态类,而tree()不是,报错如下:

技术分享

正确调用(1):

$data=(new Category)->tree(); //tree()公共方法,只能是类的对象调用,实例化类对象

正确调用(2):

将tree()方法加上static属性

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,需要修改tree()方法

 public  static function tree()
    {
        $categorys = Category::all();//获取blog_category表数据信息
        //dd($categorys); //测试打印获得的数据
        return $data=(new Category)->getTree($categorys,‘cate_name‘,‘cate_id‘,‘cate_pid‘);
    }

验证:

技术分享

 

2、后台分类页-多级分类列表

标签:接收   返回   pac   测试   /var   思想   res   方便   pre   

原文地址:http://www.cnblogs.com/guduoer/p/6363086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!