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


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 相关文章推荐
PHP 简单日历实现代码
Oct 28 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
php 文本文件的读取效率
Feb 10 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
php cli 小技巧
Jun 03 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
php定时执行任务设置详解
Feb 06 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
Laravel修改验证提示信息为中文的示例
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
wordpress之wp-settings.php
2007/08/17 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
探究python中open函数的使用
2016/03/01 Python
Python类属性的延迟计算
2016/10/22 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python命令行工具Click快速掌握
2019/07/04 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python3中rank函数的用法
2019/11/27 Python
python类中super() 的使用解析
2019/12/19 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
Python字典dict常用方法函数实例
2020/11/09 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
为什么使用接口?
2014/08/13 面试题
大二学生职业生涯规划书
2014/02/05 职场文书
降消项目实施方案
2014/03/30 职场文书
关于安全的演讲稿
2014/05/09 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
python基础之模块的导入
2021/10/24 Python
nginx之queue的具体使用
2022/06/28 Servers