跟我学做树型菜单 (一) 关键字: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 %>
|