服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP教程 - ASP 无限级分类实现

ASP 无限级分类实现

2019-09-28 11:43asp教程网 ASP教程

该例子演示了无限级分类的显示和添加.只用一个数据表实现记录无限级分类,关键是每条记录都记录了上一层类别的ID(parentid),然后通过一个递归函数来不断将类别显示出来.

ASP递归无限级分类函数 

复制代码代码如下:

<% 
'函数:getCatagory 
'功能:获得分类列表 
'参数:cat_arr -> 分类数组(Rscordset:id:分类编号,pid:上级分类,classname:分类名称,childs:子分类) 
' 按此输出些sql语句,用getRows获取得到的数据 
' cat_pid -> 上级分类编号 
' cat_childs -> 下级分类编号 
' cat_select -> 选择的分类 
' cat_dir -> 分类级别 
'返回:返回分类列表(Option) 

dim conn,cmd,rs,cat_arr 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db1.mdb") 
cmd.ActiveConnection = conn 
cmd.CommandText = "Select * from cate order by id desc" 
Set rs = cmd.Execute 
cat_arr = rs.GetRows() 
Set rs = Nothing 
Set cmd = Nothing 
Set conn = Nothing 

getCatagory cat_arr,0,"","","","{$cat.dir}├─<a href=""?id={$cat.id}"" /> 转载的一个递归函数,比较典型的应用,没有特别算法,目前我们一般常见的无限级分类函数均大同小异。简单整理了一下,包括示例打包getCatagory.rar

*大类1 
└二级小类1 
└三级小类1 
└四级小类1 
└五级小类1 
*大类2 
└二级小类2 
*大类3 

数据库说明:数据库db.mdb,classTable表的结构:classid类别ID(自动增长) parentid 父级ID 默认为0 (0代表最高级) classname类别名,classdepth是为了记录类别的级数 ———————————————- 
| classid| classname| parentid | classdepth | 
———————————————- 

主要代码: 

复制代码代码如下:

//先取出最高级(parentid=0)的分类 

<% 
set conn=server.createobject("adodb.connection") 
conn.open "Provider=Microsoft.Jet.Oledb.4.0;data source="&server.MapPath("db.mdb") 
set rs1=server.createobject("adodb.recordset") 
sql1="select * from Classtable where parentid=0 order by classid" 
rs1.open sql1,conn,1,1 
if rs1.eof or rs1.bof then 
response.write"还没分类!" 
else 
while not rs1.eof 
id1=rs1("classid") 
name1=rs1("classname") 

response.write "*<a href='class.asp?id="&id1&"&name="&name1&"‘>"&name1&"</a><br>" 
parentid1=rs1("parentid") 
call reclass(id1) 
rs1.movenext 
wend 
end if 
rs1.close 
set rs1=nothing 


sub reclass(id) 
‘递归调用函数,生成一个类别代码 
set rs=server.createobject("adodb.recordset") 
sql="select * from classtable where parentid="&id 
rs.open sql,conn,1,1 
i=1 
while not rs.eof 
id0=rs("classid") 
classname0=rs("classname") 
parentid0=rs("parentid") 
classdepth0=rs("classdepth") 
brstr="" 
for j=1 to classdepth0 
brstr=" "&brstr 
next 
response.write(brstr&"└<a href='class.asp?id="&id0&"&name="&classname0&"‘>"&classname0&"</a><br>") 
call reclass(id0) 

rs.movenext 
i=i+1 
wend 
rs.close 
set rs=nothing 
end sub 

if request("a")="add" then 
call add 
end if 
if request("name")<>"" then 
%> 
<table width="80%" align="center" cellpadding="0″ cellspacing="0″> 
<form action="class.asp?a=add&id=<%=request("id")%>" method="post"> 
<tr> 
<td> </td> 
<td>在<font color="#FF0000″><%=request("name")%></font>添加小类</td> 
</tr> 
<tr> 
<td>类别名:</td> 
<td><input name="classname" type="text" id="classname"></td> 
</tr> 
<tr> 
<td> </td> 
<td><input type="submit" name="Submit" value="提交"></td> 
</tr> 
</form> 
</table> 
<%end if 
sub add '添加类别 
id=request("id") 
classname=request("classname") 
set rs=server.createobject("adodb.recordset") 
rs.open "select parentid,classdepth from classtable where classid="&id,conn,1,1 
parentid=rs(0) 
classdepth=rs(1)+1 
rs.close 
set rs=nothing 
sql="INSERT INTO classtable (classname,parentid,classdepth) values ('"&classname&"‘,"&id&","&classdepth&")" 
conn.execute sql 
response.Write"<script>alert('添加成功!');location.href='class.asp';</script>" 
end sub 
%> 
 

延伸 · 阅读

精彩推荐