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