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 相关文章推荐
example2.php
Oct 09 PHP
PHP用户指南-cookies部分
Oct 09 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python队列原理及实现方法示例
2019/11/27 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
房地产广告策划方案
2014/05/15 职场文书
应急处置方案
2014/06/16 职场文书
中职招生先进个人材料
2014/08/31 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
小学生运动会广播
2015/08/19 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
MySQL分库分表详情
2021/09/25 MySQL