ASP 无限级分类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP 无限级分类相关的知识,希望对你有一定的参考价值。

我要做一个ASP分类程序,无限级(程序中设定分类是否在前台显示)

每个分类下显示自己 下面的 5分类名子,以及每级分类的数量 还有是不是显示的信息

+一级栏目
+--二级栏目1
+--二级栏目2
+----三级栏目1
+----三级栏目2
+------四级栏目1
+--------五级栏目1
+--------五级栏目2
+------四级栏目2
+一级栏目2
+--二级栏目1-2
+一级栏目3
+--二级栏目1-3
+--二级栏目2-3
+----三级栏目1-2-3

怎么实现呢?

我有一个php的,你自己翻译成ASP吧!

/*
'sel_Name 下拉菜单名称
'sel_selected 默认选中值
'iTableName 数据表名
'ifloor 初始层数 - 1
'iTID1 初始父级ID - 0
'sel_valField value值对应的字段名
'sel_TextField text 值对就的字段名
*/
function createSelect($sel_Name, $sel_selected , $iTableName , $ifloor=1, $iTID1=0, $sel_valField = "id",$sel_TextField="title")
if ($ifloor == 1)
$selectStr = $selectStr."<select name=\"".$sel_Name."\" id=\"".$sel_Name."\">\n";


$ifloorStr = "";
for ($i = 1; $i < $ifloor; $i++)
$ifloorStr = $ifloorStr." ";


$sql = "select * from `$iTableName` where TID1 = ".$iTID1." order by orderid";
$rs = mysql_query($sql);
while ($ary = mysql_fetch_array($rs))

$iChecked = "";
if($sel_selected == $ary[$sel_valField]) $iChecked = "selected";

$rs2 = mysql_query("select count(*) from `$iTableName` where TID1 = ".$ary["id"]);
$Vcount = @mysql_result($rs2, 0);
if ($Vcount != 0)
$selectStr = $selectStr."<optgroup label=\"".$ifloorStr."├".$ary[$sel_TextField]."--(".$ifloor."级)\"></optgroup>\n";
$selectStr = $selectStr.createSelect($sel_Name, $sel_selected, $iTableName, $ifloor + 1, $ary["id"],$sel_valField,$sel_TextField);

else
$selectStr = $selectStr."<option value='".$ary[$sel_valField]."' ".$iChecked.">".$ifloorStr."├".$ary[$sel_TextField]."--(".$ifloor."级)</option>\n";


@mysql_free_result($rs);

if ($ifloor == 1)
$selectStr = $selectStr."</select>\n";


return $selectStr;

参考技术A 你可以做选项,如果选择以及栏目的话 需要添加几次 二级栏目。
把这个次数,传值给for 里面 这样 在里面 循环添加就行了
参考技术B 自表调用,就可以达到

数据库
Forum表

id 栏目ID
forumName 栏目名称
forumParent 上级栏目

这个是最简单的自表调用无限级分类表

然后前台调用用递归的方法
如果是ASP的话,这么写

sub ListForums(parentID,str)
sql="select * from forum where forumParent="& id
dim rs,i
rs=conn.execute(sql)
if(rs.eof and rs.bof) then
else
i=1
while(not rs.eof)
%>+<%=str&rs("forum_name")&i%><br /><%
rs.movenext
i=i+1
call ListForum(rs(0),"-")
wend
end if
rs.close
set rs=nothing
end sub
参考技术C 我的百度空间里有源码,请参考(asp+access)

php无限级分类

使用递归方法,遍历子类,对数据进行重新排序,使用level进行无限级分类 

    /**
     * 功能:无限级分类
     * 参数:$data 类别查询结果集
     * 返回值:$arr 排序后的数组
     */
    public function getCateTree($data) {
        $arr = $this->cateSort($data);
        return $arr;
    }

    /**
     * 功能:无限级分类排序
     * 参数:$data 类别查询结果集
     * 返回值:$arr 递归查询排序后的数组
     */
    public function cateSort($data,$pid=0,$level=0) {
        static $arr = array();
        foreach($data as $k => $v) {
            if($v[‘pid‘] == $pid) {
                $arr[$k] = $v;
                $arr[$k][‘level‘] = $level + 1;
                $this->cateSort($data,$v[‘id‘],$level+1);
            }
        }
        return $arr;
    }

 

以上是关于ASP 无限级分类的主要内容,如果未能解决你的问题,请参考以下文章

php无限级分类

用迭代实现无限级分类

bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~

PHP无限级分类怎么查询

php实现无限级分类

PHP利用递归函数实现无限级分类的方法_php技巧 - PHP