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之变量、常量学习笔记
Mar 27 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
Laravel 队列使用的实现
Jan 08 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
phpquery中文手册
Mar 18 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
PHPEXCEL 使用小记
2013/01/06 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
Display SQL Server Version Information
2007/06/21 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python语言异常处理测试过程解析
2020/01/08 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
大学生职业生涯规划方案
2014/01/03 职场文书
高中生自我评语大全
2014/01/19 职场文书
财务部经理岗位职责
2014/02/03 职场文书
总经理助理工作职责
2014/02/06 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
会计的岗位职责
2014/03/15 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
房产证明范本
2015/06/19 职场文书
服务行业标语口号
2015/12/26 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python