標簽歸檔:無限級分類函數

PHP無限級分類函數

很早之前就想一套PHP無限級分類函數,供以后的項目用,今晚閑了無事,就寫一個把。懶得動腦,就按以前的ASP無限級分類函數的思想寫一個把。

  /*
    作者:苗啟源(Miaoqiyuan.cn)
    函數:getCatagory
    功能:獲得分類列表
    參數:cat_arr     -> 分類數組(Rscordset:id:分類編號,pid:上級分類,name:分類名稱,childs:子分類)
          cat_pid     -> 上級分類編號
          cat_childs  -> 下級分類編號
          cat_select  -> 選擇的分類
          cat_dir     -> 分類級別
    返回:返回分類列表(Option)
  */
  function getCatagory($cat_arr,$cat_pid,$cat_childs,$cat_select,$cat_dir,$format){
    if($cat_pid==0 && $format=="option"){
      echo '<option value="0">根目錄</option>';
    }
    if(is_array($cat_arr)){
      foreach($cat_arr as $cat_id =>$cat){
        if($cat['pid'] == $cat_pid && strpos("," . $cat_childs . ",","," . $cat['id'] . ",") == 0){
        #if($cat['pid'] == $cat_pid){
          if($format == "option"){
            echo '<option value="'. $cat['id'] .'" '. (($cat_select == $cat['id'])?"selected":"") . '>' . $cat_dir . '┣ ' . $cat['name'] . '</option>';
          }else{
            #<li>{$cat.dir}┣<a href="?act=edt&id={$cat.id}&type=product">{$cat.name}</a></li>
            $tmp = $format;
            if(strpos($tmp,"{\$cat.dir}")>0)$tmp = str_replace("{\$cat.dir}",$cat_dir,$tmp);
            if(strpos($tmp,"{\$cat.id}")>0)$tmp = str_replace("{\$cat.id}",$cat['id'],$tmp);
            if(strpos($tmp,"{\$cat.pid}")>0)$tmp = str_replace("{\$cat.pid}",$cat['pid'],$tmp);
            if(strpos($tmp,"{\$cat.name}")>0)$tmp = str_replace("{\$cat.name}",$cat['name'],$tmp);
            if(strpos($tmp,"{\$cat.childs}")>0)$tmp = str_replace("{\$cat.childs}",$cat['childs'],$tmp);
            echo $tmp;
          }
          getCatagory($cat_arr,$cat['id'],$cat_childs,$cat_select,$cat_dir . "┃",$format);
        }
      }
    }
  }
  
  $cat_arr = Array(
    1 => Array(
      'id'     =>1,
      'pid'    =>0,
      'name'   =>'分類一',
      'childs' =>'1,2,3,4,5'
    ),
    2 => Array(
      'id'     =>2,
      'pid'    =>1,
      'name'   =>'分類二',
      'childs' =>'2,5'
    ),
    3 => Array(
      'id'     =>3,
      'pid'    =>1,
      'name'   =>'分類4',
      'childs' =>'3,4'
    ),
    4 => Array(
      'id'     =>4,
      'pid'    =>3,
      'name'   =>'分類4',
      'childs' =>'4'
    ),
    5 => Array(
      'id'     =>5,
      'pid'    =>2,
      'name'   =>'分類5',
      'childs' =>'5'
    )
  );
  
  getCatagory($cat_arr,0,'','','','<li>{$cat.dir}┣<a href="?act=edt&id={$cat.id}&type=product">{$cat.name}</a></li>');

ASP無限級分類函數

很久之前寫的一個ASP無限級分類函數,今晚閑了無事,以此為基礎寫了一個php無限級分類函數版本的,一起分享給大家。

  '作者:苗啟源(Miaoqiyuan.cn)
  '函數:getCatagory
  '功能:獲得分類列表
  '參數:cat_arr     -> 分類數組(Rscordset:id:分類編號,pid:上級分類,classname:分類名稱,childs:子分類)
  '       按此順出些sql語句,用getRows獲取得到的數據
  '      cat_pid     -> 上級分類編號
  '      cat_childs  -> 下級分類編號
  '      cat_select  -> 選擇的分類
  '      cat_dir     -> 分類級別
  '返回:返回分類列表(Option)
  function getCatagory(byval cat_arr,byval cat_pid,byval cat_childs,byval cat_select,byval cat_dir,byval format)
    dim i,tmp
    if cat_pid=0 and format="option" then
      %><option value="0">根目錄</option><%
    end if
    if isArray(cat_arr) then
      for i=0 to ubound(cat_arr,2)
        if cat_arr(1,i) = cat_pid and instr("," & cat_childs & ",","," & cat_arr(0,i) & ",") = 0 then
          if format = "option" then
            %><option value="<%=cat_arr(0,i)%>" <%if cat_arr(0,i) = cat_select then response.write "selected"%>><%=cat_dir%>┣<%=cat_arr(2,i)%></option><%
          else
            '<li>{$cat.dir}┣<a href="?act=edt&id={$cat.id}&type=product">{$cat.name}</a></li>
            tmp = format
            if instr(tmp,"{$cat.dir}")>0 then tmp = replace(tmp,"{$cat.dir}",cat_dir)
            if instr(tmp,"{$cat.id}")>0 then tmp = replace(tmp,"{$cat.id}",cat_arr(0,i))
            if instr(tmp,"{$cat.pid}")>0 then tmp = replace(tmp,"{$cat.pid}",cat_arr(1,i))
            if instr(tmp,"{$cat.name}")>0 then tmp = replace(tmp,"{$cat.name}",cat_arr(2,i))
            if instr(tmp,"{$cat.childs}")>0 then tmp = replace(tmp,"{$cat.childs}",cat_arr(3,i))
            response.write tmp
          end if
          call getCatagory(cat_arr,cat_arr(0,i),cat_childs,cat_select,cat_dir & "┃",format)
        end if
      next
    end if
  end function