当前位置:首页 > CMS教程 > Thinkphp > 列表

tp5递归 无限级分类详解

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-10 17:24:59 浏览: 评论:0 

今天小编就为大家分享一篇tp5递归 无限级分类详解,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

在TP5公共common.php文件里写。

  1. <?php 
  2.  //计算某个类别所属的类别层数 
  3.  function getcatelayer($cateid,$flag=1){ 
  4.  $cates = M('Gcategory'); 
  5.  $ini['cate_id'] = $cateid
  6.  $arr = $cates->where($ini)->find(); 
  7.  if($arr['parent_id']!=0){ 
  8.   $flag = getcatelayer($arr['parent_id'],$flag+1); 
  9.  } 
  10.  return $flag
  11.  } 
  12.    
  13. //类别递归(单层) 
  14. function getone($arr,$parent=0,$lev=0){ 
  15.  //迭代 
  16.  $task=array($parent);//任务数组 
  17.  $tree=array();//结果数组 
  18.  while (!emptyempty($task)){ 
  19.  $flg=false; 
  20.  foreach ($arr as $k=>$v){ 
  21.     
  22.   if ($v['parent_id']==$parent) { 
  23.   $tree[]=array
  24.    'id'=>$v['cate_id'], 
  25.    'name'=>$v['cate_name'], 
  26.    'lev'=>$lev 
  27.   ); 
  28.   array_push($task$v['cate_id']); 
  29.   $parent=$v['cate_id']; 
  30.   $lev=$lev+1; 
  31.   unset($arr[$k]); 
  32.   $flg=true; 
  33.   } 
  34.    
  35.  } 
  36.  if ($flg==false) { 
  37.   array_pop($task); 
  38.   $parent=end($task); 
  39.   $lev=$lev-1; 
  40.  } 
  41.  } 
  42.  return $tree
  43.    
  44. //类别递归(多层) 
  45. function getCates($arr,$pid=0) 
  46.  for($i=0; $i<count($arr); $i++){ 
  47.   if($arr[$i]['parent_id']==$pid){ 
  48.   $newArr[] = array
  49.    "id"=>$arr[$i]['cate_id'], 
  50.    "name"=>$arr[$i]['cate_name'], 
  51.    'son'=>getCates($arr,$arr[$i]['cate_id']), 
  52.   ); 
  53.   } 
  54.  } 
  55.  return $newArr
  56.    
  57. //查询类别所属级 
  58. function getlayer($cateid,$flg=1) 
  59.  $gcg=M("Gcategory"); 
  60.  $ini["cate_id"]=$cateid
  61.  $cateArr=$gcg->where($ini)->find(); 
  62.  if($cateArr['parent_id']!=0) 
  63.  { 
  64.  $flg=getlayer($cateArr['parent_id'],$flg+1); 
  65.  } 
  66.  return $flg

一般只用其中的递归单层就可以了

控制器中

  1. <?php 
  2. //分类管理 
  3. namespace app\admin\Controller; 
  4. use think\Db; 
  5. use think\Controller; 
  6. class CategoryController extends Controller 
  7. {  
  8.  /** 
  9.  * 分类列表页(递归) 
  10.  */ 
  11.  public function category_list() 
  12.  { 
  13.  header('content-type:text/html;charset=utf-8'); 
  14.  $categoryArr=db::name('表名')->select(); 
  15.  //调用递归函数 
  16.  $getall=getone($categoryArr); 
  17.  $this->assign("getall",$getall); 
  18.  return $this->fetch() 
  19.  } 

视图 view中

  1. <div class="conShow"> 
  2.        <table border="1" cellspacing="0" cellpadding="0"> 
  3.          <tr> 
  4.            <td width="100px" class="tdColor tdC">id</td> 
  5.            <td width="150px" class="tdColor">汽车类型</td> 
  6.            <td width="180px" class="tdColor">操作</td> 
  7.          </tr> 
  8.          {foreach name="getall" id="v"
  9.          <tr> 
  10.            <td>{$v.id}</td> 
  11.            <td >{php}echo str_repeat('&nbsp;',$v['lev']*2){/php}|-{$v['name']}</td> 
  12.            <td><a href="connoisseuradd.html" rel="external nofollow" ><img class="operation" 
  13.                                src="/img/admin/update.png"></a> <img class="operation delban" 
  14.                                                   src="/img/admin/delete.png"></td> 
  15.          </tr> 
  16.          {/foreach} 
  17.        </table> 
  18.        <div class="paging">此处是分页</div> 
  19.      </div>

Tags: tp5递归 tp5无限级分类

分享到: