作家
登录

ASP 无限级分类实现

作者: 来源:www.28hudong.com 2013-03-30 08:30:18 阅读 我要评论

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=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 %>

  推荐阅读

  asp数据库连接函数

复制代码 代码如下:' ******************************************** ' 以下为数据库相关函数 ' ******************************************** ' ============================================ ' 初始化数据库连>>>详细阅读


本文标题:ASP 无限级分类实现

地址:http://www.17bianji.com/kaifa2/ASP/32273.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)