點擊下載示例壓縮包:
ASPsnakDemo.rar
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>asp無限級調用分類</title>
<style>
.class1{color:#FD0509; font-size:16px;}
.class2{color:#3B02FB; font-size:14px;}
.class3{color:#54FB05; font-size:14px;}
</style>
</head>
<body>
<%
dim startime,cn,connstr,db
startime=timer()
db="db.mdb" '數據庫
'on error resume next '嘗試連數據庫,一直到超時,但可以加強SQL注入過濾
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'connstr="DBQ="+server.mappath(""&db&"")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set cn=server.createobject("ADODB.CONNECTION")
cn.open connstr
levelCount=1
sql="select * from Menu where ParentId='0' and Status=1 order by OrderNum ASC"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,cn,1,1
do while not rs.eof
%>
<div><a href="<%=rs("url")%>" class="class1"><%=rs("title")%></a></div>
<%
call getChildMenu(rs("MenuId")," ",levelCount+1)
rs.movenext
loop
rs.close
set rs=nothing
function getChildMenu(ParentId,LevelString,levelCount)
sql="select * from Menu where ParentId='"&ParentId&"' and Status=1 order by OrderNum ASC"
set rs_ChildMenu=server.CreateObject("adodb.recordset")
rs_ChildMenu.open sql,cn,1,1
do while not rs_ChildMenu.eof
classString="class"&levelCount
if levelCount>3 then '當預設樣式不足的情況下,設置超出級別的樣式
classString="class3"
end if
%>
<div><%=LevelString%>|_ <a href="<%=rs_ChildMenu("url")%>" class="<%=classString%>"><%=rs_ChildMenu("title")%></a></div>
<%
call getChildMenu(rs_ChildMenu("MenuId"),LevelString&" ",levelCount+1)
rs_ChildMenu.movenext
loop
rs_ChildMenu.close
set rs_ChildMenu=nothing
end function
%>
<br>
//=============================<br>
Menu表中<br>
MenuId 為菜單編號,必須唯一。建此此菜單使用類似本DEMO中所使用具有一定規則的編號,方便將來的權限管理使用<br>
ParentId 為當前菜單的父菜單編號,當此字段值為0則該菜單為一級菜單<br><br>
本例遞歸函數加入levelCount參數來確定當前遞歸的層數,可使用此參數判斷當前第幾級,并且可控制當前級別調用的樣式表<br>
</body>
</html>