ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法

发布时间 - 2026-01-11 01:48:11    点击率:

假设数据库中会计科目数据表的字段为: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中的会计科目树形菜单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# ComboTree  # 树形菜单  # thinkphp实现面包屑导航(当前位置)例子分享  # thinkPHP实现的联动菜单功能详解  # thinkPHP基于ajax实现的菜单与分页示例  # ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单  # ThinkPHP无限级分类原理实现留言与回复功能实例  # thinkphp实现无限分类(使用递归)  # ThinkPHP自动填充实现无限级分类的方法  # ThinkPHP实现递归无级分类——代码少  # 使用ThinkPHP的自动完成实现无限级分类实例详解  # tp5框架前台无限极导航菜单类实现方法分析  # 递归  # 所需  # 给大家  # 子树  # 都能  # 以此类推  # 数据结构  # 希望能  # 如果不是  # 分别为  # 这篇  # 数据库中  # 小编  # 大家多多  # 主键  # 长度为  # 层中  # brush  # class 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在阿里云购买域名并搭建网站?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何快速搭建二级域名独立网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何创建自定义Artisan命令?(代码示例)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Bootstrap整体框架之JavaScript插件架构  详解阿里云nginx服务器多站点的配置  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何快速搭建高效可靠的建站解决方案?  如何在万网主机上快速搭建网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  手机软键盘弹出时影响布局的解决方法  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  ,南京靠谱的征婚网站?  如何在香港服务器上快速搭建免备案网站?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  中山网站制作网页,中山新生登记系统登记流程?  北京网站制作公司哪家好一点,北京租房网站有哪些?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  javascript中的try catch异常捕获机制用法分析  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel如何处理CORS跨域请求?(配置示例)  如何利用DOS批处理实现定时关机操作详解  简单实现jsp分页  怎么用AI帮你设计一套个性化的手机App图标?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何用狗爹虚拟主机快速搭建网站?  C++时间戳转换成日期时间的步骤和示例代码  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何发送系统通知?(Notification渠道示例)  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在橙子建站上传落地页?操作指南详解  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在VPS电脑上快速搭建网站?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  高防服务器租用首荐平台,企业级优惠套餐快速部署  海南网站制作公司有哪些,海口网是哪家的?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】