标签归档:无限级分类函数

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