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实现的简单压缩英文字符串的代码
Apr 24 PHP
PHP开发中的错误收集,不定期更新。
Feb 03 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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 参数过滤、数据过滤详解
2015/10/26 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
Vue实现简单分页器
2018/12/29 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python代码太长换行的实现
2019/07/05 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
网络文明传播志愿者活动方案
2014/08/20 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技