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

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

在数据表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‘);
    }

验证:

时间: 2024-10-12 20:23:36

2、后台分类页-多级分类列表的相关文章

Select显示多级分类列表

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>在下拉列表中显示的多级树形菜单</t

ecshop商品列表页,循环显示当前分类的二级分类以及分类下的商品

1.includes\lib_goods.php,在最末尾添加几个function /** * 获得指定分类下的子分类 * * @access public * @param integer $cat_id 分类编号 * @return array */ function get_children_tree($cat_id) { if ($cat_id >0 ) { $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('categor

zencart分类页每页显示产品数量自定义选择的方法

zencart默认分类页每页显示产品数量是固定的,如何让顾客可以选择每页显示的产品的数量呢?效果图 方式一:全部展示 方式二:下拉菜单 修改方法 1.导入sql INSERT INTO configuration (configuration_id, configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order,

WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列

WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: <?php /** *为WordPress后台的文章.分类等显示ID From wpdaxue.com * ID默认添加到列的后面 * http://www.wpdaxue.com/simply-show-ids.html * htl add 2015-01-16 */ //添加一个新的列 ID f

数据库多级分类代码(MSSQL存储过程版)

说明 相信多级分类在任何一个信息系统中都会用到,网上也能找到很多版本,下面这个是基于MSSQL存储过程版的, 手上还有VB跟C#版的,不过这几年数据库一直用MSSQL,编程语言却从VBScript到C#又到PB, 搞到现在这套分类代码分别用VB.C#.PB实现了一遍,浪费了不少时间,NND神马多数据库啊!!!哥被忽悠了. 分类采用前缀编码的方式,编码使用字符串类型的,当然也有使用二进制实现的牛人^_^. 表结构说明(表Category,ClassId,ClassName,Code 为分类相关字段

(转)smarty实现多级分类的方法

--http://www.aspku.com/kaifa/php/44679.html 这篇文章主要介绍了smarty实现多级分类的方法,涉及循环读取的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了smarty实现多级分类的方法.分享给大家供大家参考.具体分析如下: 这里简单的介绍一下利用php smarty 多级分类读出与循环方法,单循环很简单,但是多级就要复杂一点,下面我们来看看,感兴趣的朋友可以看来一下: 复制代码代码如下: <?php$result=mysql_query(

SQLite中使用CTE巧解多级分类的级联查询

在最近的活字格项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式显然是不能满足要求,经过一番实验,利用了CTE(Common Table Expression)很轻松解决了这个问题! 举例:有如下的部门表 以及员工表 如果想查询所有西北区的员工(包含西北.西安.兰州),如下图所示: 如何用CTE的方式实现呢? Talk is cheap. Show me the

SQL处理多级分类,查询结果呈树形结构

对于多级分类常规的处理方法,很多程序员可能是用程序先读取一级分类记录,然后通过一级分类循环读取下面的子分类 这样处理的弊端是:如果数据量大,子分类很多,达到4级以上,这方法处理极端占用数据库连接池 对性能影响很大. 如果用SQL下面的CTE递归处理的话,一次性就能把结果给查询出来,而且性能很不错 比用程序处理(数据量很大的情况),临时表性能更好,更方便 with area as(select *,id px,cast(id as nvarchar(4000)) px2 from region w

EXCEL中多级分类汇总空白字段填充

使用场景,多级分类汇总后,在汇总的字段中显示空白,这样对我们直接取值做表带来十分不更(假像有5000条记录,1000条汇总项) 相关技术,INDIRECT函数,单元格定位功能. 在数据区域外任意一个单元格编辑好INDIRECT函数,=INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)),如下图 先选择好上面编辑好函数的单元格,并复制,接下来选择好需要填充的空白字段,再时行定位操作,如下图          选择好空白单元格后,直接按下ctrl+v,如下图完工. 效果图