|
跟我學(xué)做樹型菜單 (一) 關(guān)鍵字:ASP|樹型菜單|遞歸 寫在前面 在網(wǎng)頁中,為了方便組織內(nèi)容,經(jīng)常用到的要數(shù)菜單了,用一個樹型的菜 單(效果參看http://www.he-xi.com/tree),可以非常方 便地對復(fù)雜的內(nèi)容進行組織。比如商品的分類;下載文件的分類;網(wǎng)站導(dǎo)航等 等。這里要解決的就是這樣一個問題。我們將會用數(shù)據(jù)庫來存儲樹型菜單的結(jié) 構(gòu),并用ASP程序來輸入。
(一)功能設(shè)計 樹型菜單在功能設(shè)計上沒有太多的要求。只有對記錄的增、刪、改。還有 就是最基本的,也是最重要的顯示功能。顯示功能要把記錄顯示出來,并且要 把顯示的內(nèi)容組織成客戶端的動態(tài)網(wǎng)頁。還可以加入移動的功能,實現(xiàn)的時候 可能有點復(fù)雜,在這里我沒有具體寫出來,有興趣的朋友可以自己寫。還可以 擴展管理員登錄功能,只有管理員登錄后才能進行管理,沒有登錄的話只顯示 菜單。其它的功能有待更新,這里就不一一列出了。具體的功能設(shè)計如下: 1、顯示菜單:最基本也是最重要的功能。顯示菜單,并組織成客戶端的動態(tài)網(wǎng)頁。 2、增加記錄:增加一個記錄,作為所選擇的記錄的子菜單。 3、刪除記錄:刪除所選擇的記錄。 4、修改記錄:修改所選擇的記錄?尚薷牡膶傩杂校好Q,鏈接。 5、*移動記錄:把所選擇的記錄移動到指定的記錄下,成為它的子菜單。 6、*管理員登錄:只有登錄后才能管理。 7、存儲的內(nèi)容:每個記錄中存儲菜單的名字和菜單的鏈接。
注:加*號的在本文中沒有實現(xiàn)。
(二)數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫使用ACCESS 2000數(shù)據(jù)庫。數(shù)據(jù)庫文件為tree.mdb 如果要求安全,可以 改名為tree.asp 不過記得在ASP程序中也要做相應(yīng)的修改。數(shù)據(jù)庫結(jié)構(gòu)如下: 表名:treemenu 字段名 字段類型 說明 id 自動編號/有索引無重復(fù)/遞增 每個記錄的編號 par_id 長整型/有索引有重復(fù) 父結(jié)點的ID號/為0表示根 chi_id 長整型/有索引有重復(fù) 子結(jié)點的個數(shù) Txt 文本/長度50 菜單的名稱/50太少的話自己改 Link 文本/長度50 鏈接/50太少的話自己改
新建好數(shù)據(jù)表后先輸入一個記錄,par_id和chi_id都為0 其它任意
(三)文件設(shè)計 在這里僅作為演示,并沒有加入太多功能。所以只有一個文件。取名為index.asp 便 于放在文件夾做為默認(rèn)文檔。在這里將會用到一些圖像,用于表示菜單的狀態(tài),可以打開資源 瀏覽器,展開一些文件夾,然后抓圖下來進行編輯一下。要注意,得到的圖像最好大小相同。 我們文中使用的是16X16的圖像?梢缘竭@里直接下載: http://www.he-xi.com/tree/images.zip
(四)相關(guān)函數(shù) 基本上要用到的函數(shù)都和《跟我學(xué)做留言本》一文的相同。主要是用于操作數(shù)據(jù)庫的。在 這里也再次列出來: 共用函數(shù)文件,文件名:operation$db.asp <% '******************************************************************* '通用數(shù)據(jù)庫ASP函數(shù) '******************************************************************* '數(shù)據(jù)庫常數(shù) databasename="tree.mdb" '數(shù)據(jù)庫名,如果改名的話,在這里修改就行了 '******************************************************************* '打開數(shù)據(jù)庫 sub opendb(connect) set connect=server.CreateObject("ADODB.connection") connect.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &_ server.MapPath(databasename) connect.Open strconn end sub '******************************************************************* '關(guān)閉數(shù)據(jù)庫 sub closedb(connect) connect.close set connect=nothing end sub '******************************************************************* '打開單個表讀 sub opentable(connect,tbname,myrs) set myrs=server.createobject("ADODB.recordset") rssql="select * from " & tbname myrs.open rssql,connect,1,1 end sub '******************************************************************* '關(guān)閉臨時表 sub closetable(rs) rs.close set rs=nothing end sub '******************************************************************* '查詢數(shù)據(jù)庫 sub searchtable(connect,sql,rs) set rs=server.createobject("ADODB.recordset") rs.open sql,connect,1,1 end sub
'******************************************************************* '查詢并更改數(shù)據(jù)庫 sub changetable(connect,sql,rs) set rs=server.createobject("ADODB.recordset") rs.open sql,connect,1,3 end sub
'******************************************************************* '顯示信息 用于調(diào)試 Sub w(msg) response.write msg end sub
'******************************************************************* '程序中斷 用于調(diào)試 sub userstop() response.end end sub %>
|