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}"" title=""分类级别:{$cat.dir} 分类编号:{$cat.id} 分类上级编号:{$cat.pid} 分类名称:{$cat.name} 分类子分类:{$cat.childs}"">{$cat.name} /a>br />"vbcrlf
function getCatagory(byval cat_arr,byval cat_pid,byval cat_childs,byval cat_select,byval cat_dir,byval format)
dim i,tmp
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
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
call getCatagory(cat_arr,cat_arr(0,i),cat_childs,cat_select,cat_dir "│",format)
end if
next
end if
end function
%>
转载的一个递归函数,比较典型的应用,没有特别算法,目前我们一般常见的无限级分类函数均大同小异。简单整理了一下,包括示例打包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=addid=%=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
%>
您可能感兴趣的文章:- mysql 无限级分类实现思路
- php实现无限级分类(递归方法)
- php 无限级分类,超级简单的无限级分类,支持输出树状图
- php实现无限级分类查询(递归、非递归)
- php实现无限级分类
- ThinkPHP无限级分类原理实现留言与回复功能实例
- winform树形菜单无限级分类实例
- php+mysql实现无限级分类 | 树型显示分类关系
- Asp.net 无限级分类实例代码
- thinkphp5实现无限级分类