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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
Oct 09 PHP
第六章 php目录与文件操作
Dec 30 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
php实现数据库的增删改查
Feb 26 PHP
php修改数组键名的方法示例
Apr 15 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
vue cli 全面解析
2018/02/28 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Django如何自定义分页
2018/09/25 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
机械工程师的岗位职责
2013/11/17 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
安全责任书
2015/01/29 职场文书
2019入党申请书格式
2019/06/25 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书