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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
利用PHP制作简单的内容采集器的代码
Nov 28 PHP
JS实现php的伪分页
May 25 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
Yii框架分页技术实例分析
Aug 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 星际争霸
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
js数组的操作详解
2013/03/27 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
python实现类之间的方法互相调用
2018/04/29 Python
Python3.6简单反射操作示例
2018/06/14 Python
python3实现字符串操作的实例代码
2019/04/16 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
毕业自我评价范文
2013/11/17 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
开工仪式策划方案
2014/05/23 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
先进单位事迹材料
2014/12/25 职场文书
销售督导岗位职责
2015/04/10 职场文书
电影地道战观后感
2015/06/04 职场文书
《将心比心》教学反思
2016/02/23 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL