thinkphp5实现无限级分类

 更新时间:2019年02月18日 10:41:30   作者:知末随未  
这篇文章主要为大家详细介绍了thinkphp5实现无限级分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

tp5对分类数据表的信息读取与展示,我们即可以控制器完成,也可以在对应的模型中完成。本案例,我们在模型中完全成。况且,对数据表的增,删改查操作,本来就是模型的本职工作。

首先声明一下,我们采用递归的方式来实现无限分类。但无限分类的实现,不是只是递归一种方式,还有一种是全路径方式,也可以实现,不过,这种方式通常用在全路径导航菜单中。所以,这里我们还是用最常见的递归函数来实现:无限分类。

首先我们先创建一个静态方法:getCate,为什么要静态方式,因为静态方法执行效率高,不需要实例化,而且,分类查询是使用非常频繁的操作,很多查询都要依赖分类查询的结果。

当前的getCate方法,有三个参数:

第一个是$pid,是父类的id,默认为0,表示从顶开始查起。

第二个参数是返回的查询结果,我们放在一个数组中返回,注意,这个变量是引入方式传入的。

在递归函数中,返回结果有三种方式:

第一种就是大家比较熟悉的,使用全局变量$_GLOBALS[],这个方法有副作用,我们不用它;

第二种方式也不错,是在函数中用static关键字,声明一个静态变量,它可以将每一次的递归执行结果进行累计,最后再返回,非常好理解,但占用资源过多,执行效率低;

第三种,就是采用引用参数的方式,来返回结果,这也是目前主流的技术。尽管理解起来有难度,但执行效率是最高的,我们要玩,就玩大的,所以这里,我们就直接采用引用,来返回查询结果。

第三个参数,可以没有,它是用来设置一下分类之间的层次显示的,可以让结果看上去更直观清晰。

<?php
 
namespace app\admin\model;
 
use think\Collection;
use think\Model;
 
class Category extends Model
{
 //创建一个静态方法getCate,来获取分类信息
 
 /**
  * @param int $pid: 当前分类的父id
  * @param array $result:引用返回值
  * @param int $blank:设置分类之间的显示提示
  */
 public static function getCate($pid=0, &$result=[], $blank=0)
 {
  //1.分类表查询:$pid
  $res = self::all(['pid'=>$pid]);
 
  //2.自定义分类名称前面的提示信息
  $blank += 2;
 
  //3.遍历分类表
  foreach ($res as $key => $value) {
 
   //3-1自定义分类名称的显示格式
   $cate_name = '|--'.$value->cate_name;
   $value->cate_name = str_repeat('&nbsp;',$blank).$cate_name;
 
   //3-2将查询到的当前记录保存到结果$result中
   $result[] = $value;
 
   //3-3关键:将当前记录的id,做为下一级分类的父id,$pid,继续递归调用本方法
   self::getCate($value->id, $result, $blank);
  }
 
  //4.返回查询结果,调用结果集类make方法打包当前结果,转为二维数组返回
  return Collection::make($result)->toArray();
 }
}

控制器中调用代码:

public function edit(Request $request)
{
 //1.获取一下分类id
 $cate_id = $request -> param('id');
 
 //2.查询要更新的数据
 $cate_now = CategoryModel::get($cate_id);
 
 //3.递归查询所有的分类信息
 $cate_level = CategoryModel::getCate();
 
 //4.模板赋值
 $this -> view -> assign('cate_now', $cate_now);
 $this -> view -> assign('cate_level', $cate_level);
 
 
 //5.渲染模板
 return $this -> view -> fetch('category_edit');
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • thinkPHP5框架路由常用知识点汇总

    thinkPHP5框架路由常用知识点汇总

    这篇文章主要介绍了thinkPHP5框架路由常用知识点,整理汇总了thinkPHP5框架路由相关概念、原理及操作技巧,需要的朋友可以参考下
    2019-09-09
  • laravel框架中控制器的创建和使用方法分析

    laravel框架中控制器的创建和使用方法分析

    这篇文章主要介绍了laravel框架中控制器的创建和使用方法,结合实例形式详细分析了laravel框架控制器的原理、创建、使用方法及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • CI框架学习笔记(一) - 环境安装、基本术语和框架流程

    CI框架学习笔记(一) - 环境安装、基本术语和框架流程

    本文是CI框架学习笔记的第一篇,主要介绍了CI框架的环境安装,基本术语以及框架流程,非常的详细,有需要的朋友可以参考下
    2014-10-10
  • PHP迭代器实现斐波纳契数列的函数

    PHP迭代器实现斐波纳契数列的函数

    斐波纳契数列通常做法是用递归实现,当然还有其它的方法。这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次。注释已经写到代码中,也是相当好理解的
    2013-11-11
  • 编写PHP程序检查字符串中的中文字符个数的实例分享

    编写PHP程序检查字符串中的中文字符个数的实例分享

    这篇文章主要介绍了编写PHP程序检查字符串中的中文字符个数的实例分享,文中利用了PHP中mb_strlen函数的实现原理,需要的朋友可以参考下
    2016-03-03
  • 6种php上传图片重命名的方法实例

    6种php上传图片重命名的方法实例

    本文提供了6种php上传图片重命名的方法并对6种方法做了比较,肯定有一种合适你用的。
    2013-11-11
  • PHP反射机制案例讲解

    PHP反射机制案例讲解

    这篇文章主要介绍了PHP反射机制案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Laravel5.4简单实现app接口Api Token认证方法

    Laravel5.4简单实现app接口Api Token认证方法

    这篇文章主要介绍了Laravel5.4简单实现app接口Api Token认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Linux系统下安装PHP7.3版本

    Linux系统下安装PHP7.3版本

    这篇文章主要介绍了Linux系统下安装PHP7.3版本,本文含有详细的过程和配置过程,可以帮助你正确的配置php开发环境,需要的朋友可以参考下
    2021-06-06
  • php使用event扩展的io复用测试的示例

    php使用event扩展的io复用测试的示例

    这篇文章主要介绍了php使用event扩展的io复用测试的示例,帮助大家更好的理解和使用php,感兴趣的朋友可以了解下
    2020-10-10

最新评论