日期:2013-07-27  浏览次数:20895 次

跟我学做树型菜单 (一)
关键字:ASP|树型菜单|递归
写在前面
在网页中,为了方便组织内容,经常用到的要数菜单了,用一个树型的菜
单(效果参看http://www.he-xi.com/tree),可以非常方
便地对复杂的内容进行组织。比如商品的分类;下载文件的分类;网站导航等
等。这里要解决的就是这样一个问题。我们将会用数据库来存储树型菜单的结
构,并用ASP程序来输入。

(一)功能设计
树型菜单在功能设计上没有太多的要求。只有对记录的增、删、改。还有
就是最基本的,也是最重要的显示功能。显示功能要把记录显示出来,并且要
把显示的内容组织成客户端的动态网页。还可以加入移动的功能,实现的时候
可能有点复杂,在这里我没有具体写出来,有兴趣的朋友可以自己写。还可以
扩展管理员登录功能,只有管理员登录后才能进行管理,没有登录的话只显示
菜单。其它的功能有待更新,这里就不一一列出了。具体的功能设计如下:
1、显示菜单:最基本也是最重要的功能。显示菜单,并组织成客户端的动态网页。
2、增加记录:增加一个记录,作为所选择的记录的子菜单。
3、删除记录:删除所选择的记录。
4、修改记录:修改所选择的记录。可修改的属性有:名称,链接。
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
%>