主题:  无限分类的问题.

透明男孩

职务:普通成员
等级:2
金币:0.0
发贴:373
#12004/12/21 8:27:28
我做无限级分类时遇到了头大的问题.
我想以简单的树状来显示结构层次.
下面是我的数据库的结构.
表:class
字段 classid parentid level classname
数据 1 0 1 1111
数据 2 0 1 2222
数据 3 0 1 3333
数据 4 3 2 aaaa
数据 5 4 3 aaaa
数据 6 5 4 aaaa
数据 7 6 5 aaaa
数据 8 7 6 aaaa
请各位帮忙.



轻松逍遥子

职务:普通成员
等级:1
金币:0.0
发贴:8
#22004/12/21 8:45:07
网友小灰写的无限树形菜单目录,算法是把menu(id)函数套嵌循环执行
属于多次查询,效率不是很高,但比较容易看懂,一次查询就搞定的是动网的论坛,你可以下个看看,算法比较难懂,你先看这个再去看那个.
<%
set conn=server.createobject("ADODB.CONNECTION"
connstr="DBQ="+server.mappath("db1.mdb"+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
conn.open connstr
function menu(id)
set rs=server.CreateObject("adodb.recordset"
sql="select * from menu where id1="&id&" order by url,id"
rs.open sql,conn,1,1
if rs.recordcount=0 then
rs.close
set rs=nothing
exit function
end if
response.write("<table border='0' cellspacing='0' cellpadding='0'>"
i=1
while not rs.eof
if len(rs("url")>0 then
if i=rs.recordcount then
 menutype="file1"
else
 menutype="file"
end if
menuname="<a href='"&rs("url"&"' target='_blank'>"&rs("menuname"&"</a>"
onmouseup=""
else
if i=rs.recordcount then
 menutype="menu3"
 listtype="list1"
 onmouseup="with(eval('id"&rs("id"&"'))if(style.display==''){style.display='none';this.className='menu3';}else{style.display='';this.className='menu4';}"
else
 menutype="menu1"
 listtype="list"
 onmouseup="with(eval('id"&rs("id"&"'))if(style.display==''){style.display='none';this.className='menu1';}else{style.display='';this.className='menu2';}"
end if
menuname=rs("menuname"
end if
%>
 <tr>
  <td class="<%= menutype%>" onMouseUp="<%= onmouseup%>"><%= menuname%></td>
 </tr>
<%if len(rs("url")<3 then%>
 <tr id="id<%= rs("id"%>" style="display:none">
  <td class="<%= listtype%>"><%menu(rs("id")%></td>
 </tr>
<%
end if
rs.movenext
i=i+1
wend
response.write("</table>"
rs.close
set rs=nothing
end function
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>=========无限级目录树=========</title>
<style type="text/css">
<!--
.menu1 {
background-image: url(folder1.gif);
background-repeat: no-repeat;
height: 17px;
left: 32px;
padding-left: 32px;
cursor: hand;
}
.menu2 {
background-image: url(folder2.gif);
background-repeat: no-repeat;
height: 17px;
left: 32px;
padding-left: 32px;
cursor: hand;
}
.menu3 {
background-image: url(folder3.gif);
background-repeat: no-repeat;
height: 17px;
left: 32px;
padding-left: 32px;
cursor: hand;
}
.menu4 {
background-image: url(folder4.gif);
background-repeat: no-repeat;
height: 17px;
left: 32px;
padding-left: 32px;
cursor: hand;
}
.list {
padding-left: 20px;
background-image: url(list.gif);
background-repeat: repeat-y;
}
.list1 {
padding-left: 20px;
}
.file {
background-image: url(file.gif);
background-repeat: no-repeat;
height: 16px;
cursor: hand;
padding-left: 32px;
}
.file1 {
background-image: url(file1.gif);
background-repeat: no-repeat;
height: 16px;
cursor: hand;
padding-left: 32px;
}
body {
font-size: 9pt;
color: #000000;
background-color: #FFFFFF;
}
a:link {
font-size: 9pt;
color: #000000;
text-decoration: none;
}
a:visited {
font-size: 9pt;
color: #000000;
text-decoration: none;
}
a:hover {
font-size: 9pt;
color: #0000FF;
text-decoration: none;
position: relative;
right: 1px;
bottom: 1px;
}
a:active {
font-size: 9pt;
color: #000000;
text-decoration: none;
}
-->
</style>
</head>
<body>
<a href="/" target="_blank">http:///</a>提供最新下载《<a href="menu.asp">管理</a>》<br>
<%
menu 0
conn.close
set conn=nothing
%>
</body>
</html>



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#32004/12/21 8:51:44
无限分类要做得好还是有一定技巧,下面是我前些日写的文章,作为一种方法参考。
www.5d.cn/bbs/newsdetail.asp?id=1324889&posts=current

在ASP编程中,我也看了一些这方面原代码,有些是在数据库方面设计很细,字段包括父类、下属分类、路径等很多。因在ASP中难以用类,用过程比较难描述树形。

本文是以.NET为环境,在数据库上仅设计了父类,把数据库导入后,自动生成树形。另需说明,本类我已多次修改,这里是最初版,可能会有些小错误,仅提供方法,另外还有许多方法,并需要增加一些重要的属性,要自己完成的。

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2004-12-21 08:58:08)]

非常大鱼

透明男孩

职务:普通成员
等级:2
金币:0.0
发贴:373
#42004/12/21 19:14:00
逍遥子,你个垃圾出关了?
不过还是谢你帮我解答.^_^

同时也感谢蓝鲸,不过俺的水平还不会玩.NET.