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调用三种数据库的方法(3)
Oct 09 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
ThinkPHP中RBAC类的四种用法分析
Nov 24 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
Mar 15 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php实现每日签到功能
Nov 29 PHP
PHP CURL使用详解
Mar 21 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 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实现多条件查询实例代码
2010/07/17 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python实现支付宝转账接口
2019/05/07 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
python计算导数并绘图的实例
2020/02/29 Python
Python爬虫教程知识点总结
2020/10/19 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
大学旷课检讨书
2014/01/28 职场文书
一年级语文教学反思
2014/02/13 职场文书
请假条的格式
2014/04/11 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
签证工作证明模板
2015/06/15 职场文书
情人节单身感言
2015/08/03 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
详解Python类和对象内容
2021/06/22 Python
以下牛机,你有几个
2022/04/05 无线电
Go获取两个时区的时间差
2022/04/20 Golang