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 相关文章推荐
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php计算一个文件大小的方法
Mar 30 PHP
Laravel 5框架学习之表单
Apr 08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php简单静态页生成过程
2008/03/27 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
js word表格动态添加代码
2010/06/07 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
python实现的多线程端口扫描功能示例
2017/01/21 Python
python中异常捕获方法详解
2017/03/03 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
自我检讨书怎么写
2015/05/07 职场文书
护士岗位竞聘书
2015/09/15 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS