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作的文本留言本的例子(四)
Oct 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
laravel通过a标签从视图向控制器实现传值
Oct 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
培训心得体会
2013/12/29 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
党员服务承诺书
2014/05/28 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
护士先进个人总结
2015/02/13 职场文书
毕业实习感受与体会
2015/05/26 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
教你用eclipse连接mysql数据库
2021/04/22 MySQL