ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法


Posted in PHP onJune 09, 2017

假设数据库中会计科目数据表的字段为:id,code,name,islast。分别为自增主键,科目编码,科目名称,是否为末级("1"表示末级科目)。

这里在Thinkphp的模型层中使用递归来构建ComboTree所需的数据,代码及注解如下:

namespace Home\Model;
use Think\Model;

class AccountModel extends Model{

public function getTreeList(){  
  $data = $this->field('id,code,name,islast')->select(); 
  foreach($data as &$v){  //这里加入了元素pid,用来标识父级id的 
   $len = strlen($v['code']);
   if($len == 3){//这里假设长度为3位的科目编码是一级,5位为二级科目,7位为三级,以此类推
    $v['pid'] = 0; 
   } else {
    $v['pid'] = substr($v['code'],0,$len-2); 
   }  
  }
  return $this->createTree($data); //生成ComboTree所需的数据结构
 }
 
 //递归的方式生成子树
 private function createSubTree($data,$pid){
  $tree = array();
  foreach($data as $k=>$v){
   if($v['pid'] == $pid){
    $newDate = array(
     'id' => $v['id'],
     'text'=>$v['name'],
     'state'=>($v['islast'] != 1)?'closed':'open'
    ); 
    if($v['islast'] != 1){//如果不是末级科目调用自身生成子数据
     $subData = $this->createSubTree($data,$v['code']);
     if(!empty($subData)){
      $newDate['children'] = $subData;  
     }
    }
    array_push($tree,$newDate);
   }   
  } 
  return $tree;
 }
 
 //生成树,先从一级会计科目分类开始创建树形菜单数据
 private function createTree($data){  
  $ret = array();
  foreach($data as $k => $v){
   if($v['pid'] == 0){
    $newDate = array(  //创建为ComboTree能够识别的格式,这里我没有更好的办法了,只能这样处理
     'id' => $v['id'],
     'text'=>$v['name'],
     'state'=>'closed'
    ); 
    $subData = $this->createSubTree($data,$v['code']);
    if(!empty($subData)){
     $newDate['children'] = $subData;  
    }
    $ret[] = $newDate; 
   }    
  }
  return $ret;
 }  
}

类似上述的数据(如部门,地区等)需要构建树形菜单的简单修改代码后基本都能实现类似功能。

以上这篇ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP7数组的底层实现示例
Aug 25 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 PHP
php使用crypt()函数进行加密
Jun 08 #PHP
微信封装的调用微信签名包的类库
Jun 08 #PHP
微信公众号实现会员卡领取功能
Jun 08 #PHP
php图像验证码生成代码
Jun 08 #PHP
php面向对象的用户登录身份验证
Jun 08 #PHP
php实现用户注册密码的crypt加密
Jun 08 #PHP
php封装一个异常的处理类
Jun 08 #PHP
You might like
PHP中的按位与和按位或操作示例
2014/01/27 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python实现调度算法代码详解
2017/12/01 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
详解python 中in 的 用法
2019/12/12 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
火车来了教学反思
2014/02/11 职场文书
我为自己代言广告词
2014/03/18 职场文书
座谈会主持词
2014/03/20 职场文书
《长相思》听课反思
2014/04/10 职场文书
大学生党员承诺书
2014/05/20 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js