Méthode d'implémentation du menu de l'arborescence comptable dans ComboTree de ThinkPHP+EasyUI

怪我咯
Libérer: 2023-03-10 13:18:02
original
1077 Les gens l'ont consulté

L'éditeur suivant vous proposera un article sur la façon d'implémenter le menu de l'arborescence comptable dans ComboTree de ThinkPHP+EasyUI. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'oeil

Supposons que les champs de la table des données comptables dans la base de données soient : id, code, name, islast. Il s'agit de la clé primaire à incrémentation automatique, du code du compte, du nom du compte et s'il s'agit du compte de dernier niveau (« 1 » indique le compte de dernier niveau).

Ici, la récursion est utilisée dans la couche modèle de Thinkphp pour créer les données requises pour ComboTree. Le code et les annotations sont les suivants :

<.>

namespace Home\Model;
use Think\Model;

class AccountModel extends Model{

  public function getTreeList(){  
  $data = $this->field(&#39;id,code,name,islast&#39;)->select(); 
  foreach($data as &$v){        //这里加入了元素pid,用来标识父级id的   
   $len = strlen($v[&#39;code&#39;]);
   if($len == 3){          //这里假设长度为3位的科目编码是一级,5位为二级科目,7位为三级,以此类推
    $v[&#39;pid&#39;] = 0; 
   } else {
    $v[&#39;pid&#39;] = substr($v[&#39;code&#39;],0,$len-2); 
   }  
  }
  return $this->createTree($data); //生成ComboTree所需的数据结构
 }
 
 //递归的方式生成子树
 private function createSubTree($data,$pid){
  $tree = array();
  foreach($data as $k=>$v){
   if($v[&#39;pid&#39;] == $pid){
    $newDate = array(
     &#39;id&#39; => $v[&#39;id&#39;],
     &#39;text&#39;=>$v[&#39;name&#39;],
     &#39;state&#39;=>($v[&#39;islast&#39;] != 1)?&#39;closed&#39;:&#39;open&#39;
    ); 
    if($v[&#39;islast&#39;] != 1){        //如果不是末级科目调用自身生成子数据
     $subData = $this->createSubTree($data,$v[&#39;code&#39;]);
     if(!empty($subData)){
      $newDate[&#39;children&#39;] = $subData;  
     }
    }
    array_push($tree,$newDate);
   }   
  } 
  return $tree;
 }
 
 //生成树,先从一级会计科目分类开始创建树形菜单数据
 private function createTree($data){  
  $ret = array();
  foreach($data as $k => $v){
   if($v[&#39;pid&#39;] == 0){
    $newDate = array(  //创建为ComboTree能够识别的格式,这里我没有更好的办法了,只能这样处理
     &#39;id&#39; => $v[&#39;id&#39;],
     &#39;text&#39;=>$v[&#39;name&#39;],
     &#39;state&#39;=>&#39;closed&#39;
    ); 
    $subData = $this->createSubTree($data,$v[&#39;code&#39;]);
    if(!empty($subData)){
     $newDate[&#39;children&#39;] = $subData;  
    }
    $ret[] = $newDate; 
   }    
  }
  return $ret;
 }  
}
Copier après la connexion

Les données similaires à celles ci-dessus (telles que les départements, les régions, etc.) peuvent essentiellement réaliser des fonctions similaires en modifiant simplement le code pour créer un menu arborescent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal