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 验证码制作(网树注释思想)
Jul 20 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 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个人网站架设连环讲(一)
2006/10/09 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP解决中文乱码
2017/04/28 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JQuery小知识
2010/10/15 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
高中家长寄语
2014/04/02 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
诉讼授权委托书
2014/10/15 职场文书
邀请函格式范文
2015/02/02 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
导游词之天津古文化街
2019/11/09 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python