创建无限极分类树型结构的简单方法


Posted in PHP onJune 20, 2017

先上效果图

创建无限极分类树型结构的简单方法

顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类。

接下来看具体实现的代码:

一、在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写。)

public function cate_display()
  {
    $cate = D('Cate'); 
    $field = array('id','cate_name','pid','sorts');
    $list = $cate->allCategory($field);
    $this->assign('list',$list);
    $this->display();
  }

二、模型中的代码

在对应控制器的模型中创建两个方法

1.查询所有分类信息,并调用生成分类树方法:

public function allCategory($field='*'){
     $data = $this->field($field)->select();
     return $this->tree($data);
   }

2.生成分类树(使用递归,传进去数据,以及pid[父类id],level[层数,用来控制显示的-数量]两个变量,初始值为零)

public function tree($data,$pid=0,$level=0){
    static $tree = array();
    foreach($data as $k=>$v){
      if($v['pid'] == $pid){
        $v['level'] = $level;
        $tree[]=$v;
        $this->tree($data,$v['id'],$level+1);
      }
    }
  
    return $tree;
  }

三、视图文件中的代码

<div class="form-group">
        <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label>
        <div class="col-sm-6">
          <select name="pid" style="width: 100%;">
            <option selected="selected" value="0">顶级菜单</option>
            <volist name="row" id="val"> 
              <option value="{$val.id}"><?php echo str_repeat('-',$val['level']*4); ?>{$val.cate_name}
              </option> 
            </volist> 
          </select>
        </div>
      </div>

这样,一个可以无限递归的分类树形结构就完成了,总结:核心思想还是模型中的递归函数,先传进去pid默认为零,以后每次递归传入的pid就是上级的id,level用来记录递归层数,最后在视图页面显示时,调用PHP内置函数str_repeat(),用来重复输出'-‘以达到输出时区分级数的效果。

以上这篇创建无限极分类树型结构的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
多文件上载系统完整版
Oct 09 PHP
ftp类(myftp.php)
Oct 09 PHP
一个自定义位数的php多用户计数器代码
Mar 11 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
如何使用php输出时间格式
Aug 31 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
laravel5.6中的外键约束示例
Oct 23 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 #PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 #PHP
PHP中模糊查询并关联三个select框
Jun 19 #PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 #PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 #PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 #PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 #PHP
You might like
php at(@)符号的用法简介
2009/07/11 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
angular多语言配置详解
2019/05/16 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
python 实现多维数组转向量
2019/11/30 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
趣味体育活动方案
2014/02/08 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
升职演讲稿范文
2014/05/23 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
地震慰问信
2015/02/14 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
故意杀人案辩护词
2015/05/21 职场文书
《失物招领》教学反思
2016/02/20 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript