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