把無限級分類循環出來確實是一件頭疼的事情。
比如,我們要循環出一個SELECT,或一個TABLE,要寫一大堆判斷。
有沒好點的辦法呢?
我的做法是生成數組,可以重複調用,直接循環數組就行了。
為了方便,我把它寫成了類。
class.asp
返回所有分類的數組,並按順序排列
有4個屬性:
複製代碼代碼如下:setaa=newclasslist
aa.id="id"//編號的名稱
aa.classname="classname"//分類名稱
aa.pid="pid"//父ID名稱
aa.db_name="class"//表名
list=aa.arrylist()
複製代碼代碼如下:<%
classclasslist
privatec_id
privatec_db_name
privatec_pid
privatec_classname
publicpropertyletid(str)
c_id=str
endproperty
publicpropertyletdb_name(str)
c_db_name=str
endproperty
publicpropertyletpid(str)
c_pid=str
endproperty
publicpropertyletclassname(str)
c_classname=str
endproperty
dimlist()
dimi,n
PrivateSubClass_Initialize()'初始化變量
i=0
n=0
EndSub
publicfunctionclassarry(thisid,pid)'取得下級ID
ifpid>0then
sql="select*from"&c_db_name&"where"&c_pid&"="&thisid
else
sql="select*from"&c_db_name&"where"&c_id&"="&thisid
endif
setrs_c=conn.execute(sql)
n=n+1
dowhilenotrs_c.eof
list(0,i)=rs_c(c_id)'裝入數組中
list(1,i)=rs_c(c_classname)
list(2,i)=n
'n=n+1
i=i+1
thisid=classarry(rs_c(c_id),1)'這裡遞歸調用,直到最後一個子類
rs_c.movenext
loop
n=n-1
rs_c.close
endfunction
publicfunctionarrylist()'循環出所有根類
setrs_c=conn.execute("selectcount("&c_id&")from"&c_db_name)
lenght=rs_c(0)
rs_c.close
redimlist(2,lenght)'設置數組
setrs1=conn.execute("select"&c_id&"from"&c_db_name&"where"&c_pid&"=0")
dowhilenotrs1.eof
callclassarry(rs1(c_id),0)
'n=1
rs1.movenext
loop
rs1.close
arrylist=list
endfunction
endclass
%>
實例測試:
表CLASS
字段
id:自動編號
classname:名稱
pid:父ID