使用thinkphp5怎么实现一个无限级分类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。
当前的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'); }
看完上述内容,你们掌握使用thinkphp5怎么实现一个无限级分类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。