thinkphp5实现无限级分类


Posted in PHP onFebruary 18, 2019

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(' ',$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');
}

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

PHP 相关文章推荐
提升PHP执行速度全攻略(上)
Oct 09 PHP
很实用的一个完整email发送程序
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
php与paypal整合方法
Nov 28 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php读取excel文件的简单实例
Aug 26 PHP
destoon复制新模块的方法
Jun 21 PHP
CI框架Session.php源码分析
Nov 03 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
php实现文章评论系统
Feb 18 #PHP
php无限级分类实现评论及回复功能
Feb 18 #PHP
PHP-FPM 的管理和配置详解
Feb 17 #PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 #PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
Feb 16 #PHP
PHP封装的mysqli数据库操作类示例
Feb 16 #PHP
PHP fprintf()函数用法讲解
Feb 16 #PHP
You might like
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
用原生js做单页应用
2017/01/17 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
Angular 如何使用第三方库的方法
2018/04/18 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
推荐11个实用Python库
2015/01/23 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Python序列类型的打包和解包实例
2019/12/21 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
应届生自我鉴定
2013/12/11 职场文书
大气污染防治方案
2014/05/19 职场文书
护士找工作求职信
2014/07/02 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
银行服务理念口号
2015/12/25 职场文书