时时商务社区

标题: ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法 [打印本页]

作者: 阿情    时间: 2018-2-14 05:25

            假设数据库中会计科目数据表的字段为: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中的会计科目树形菜单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
            
            
您可能感兴趣的文章:
  • EasyUI 中combotree 默认不能选择父节点的实现方法
  • 浅谈EasyUi ComBotree树修改 父节点选择的问题
  • easyui中combotree循环获取父节点至根节点并输出路径实现方法
  • jQuery Easyui 下拉树组件combotree
            




    欢迎光临 时时商务社区 (http://bbs.4435.cn/) Powered by Discuz! X3.2