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面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
php防盗链的常用方法小结
Jul 02 PHP
PHP读取ACCESS数据到MYSQL的代码
May 11 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
php 可变函数使用小结
Jun 12 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
mysql 性能的检查和优化方法
2009/06/21 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python装饰器用法实例总结
2018/02/07 Python
python实现字符串和数字拼接
2020/03/02 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android