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常用技巧总结(附函数代码)
Feb 04 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 PHP
php post换行的方法
Feb 03 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
讲解Python中的递归函数
2015/04/27 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
python pygame实现2048游戏
2018/11/20 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
人工神经网络算法知识点总结
2019/06/11 Python
python内打印变量之%和f的实例
2020/02/19 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
岳父生日宴会答谢词
2014/01/13 职场文书
洗发露广告词
2014/03/14 职场文书
经理聘任证明
2015/03/02 职场文书
个人求职意向书
2015/05/11 职场文书
全陪导游词开场白
2015/05/29 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书