上一篇 | 下一篇

使用函数递归实现基于php和MySQL的动态树型菜单

发布: 2008-7-01 12:41 | 作者: admin | 来源: | 查看: 0次

使用函数递归实现基于php和MySQL的动态树型菜单

【字体:小 大】

使用函数递归实现基于php和MySQL的动态树型菜单

作者:不详 文章来源:网络 点击数:1172 更新时间:2007-1-21

树型菜单在很多桌面应用系统中都有非常广泛的应用,其主要优点是结构清晰,利于使用者非常清楚的知道目前自己所在的位置。但在web上树型菜单的应用因为没有理想的现成组件可以拿过来直接使用,所以一般的情况下,程序员主要是通过JavaScript来实现一些简单的树型结构菜单,但这些菜单往往都是事先定好各菜单项目,以及各菜单项目之间的层次关系,不利于扩充,一旦需要另一个菜单结构时,往往还需要重新编写,因此使用起来不是很方便。

经过对函数递归的研究,我发现这种树型菜单可以通过递归函数,使树型菜单的显示实现动态变化,并没有级数的限制。下面就是我用php,MySql,JavaScript写的一个动态树型菜单的处理代码,如果大家有兴趣的话,就和我一起来看看我是如何实现的吧:)

首先,我们需要一个数据库,在这个数据库中,我们建立以下一张表:

CREATETABLEmenu(

idtinyint(4)NOTNULLauto_increment,

parent_idtinyint(4)DEFAULT0NOTNULL,

namevarchar(20),

urlvarchar(60),

PRIMARYKEY(id)

);

这张表中

id为索引

parent_id用来保存上一级菜单的id号,如果是一级菜单则为0

name为菜单的名称,也就是要在页面上显示的菜单内容

url如果某菜单为末级菜单,则需要指定该连接的url地址,这个字段就是用来保存此地址的,其他非末级菜单,该字段为空

好了,数据库有了,你就可以添加一些记录了,下面是我做测试的时候,使用的一些记录:

INSERTINTOmenuVALUES(1,0,人事管理,);

INSERTINTOmenuVALUES(2,0,通讯交流,);

INSERTINTOmenuVALUES(3,1,档案管理,);

INSERTINTOmenuVALUES(4,1,考勤管理,http://localhost/personal/attendance.php);

INSERTINTOmenuVALUES(5,2,通讯录,);

INSERTINTOmenuVALUES(6,2,网络会议,);

INSERTINTOmenuVALUES(7,3,新增档案,http://localhost/personal/add_achive.php);

INSERTINTOmenuVALUES(8,3,查询档案,http://localhost/personal/search_archive.php);

INSERTINTOmenuVALUES(9,3,删除档案,http://localhost/personal/delete_archive.php);

INSERTINTOmenuVALUES(10,5,新增通讯记录,http://localhost/communication/add_address.php);

INSERTINTOmenuVALUES(11,5,查询通讯记录,http://localhost/communication/search_address.php);

INSERTINTOmenuVALUES(12,5,删除通讯记录,http://localhost/communication/delete_address.php);

INSERTINTOmenuVALUES(13,6,召开会议,http://localhost/communication/convence_meeting.php);

INSERTINTOmenuVALUES(14,6,会议查询,http://localhost/communication/search_meeting.php);

在添加记录的时候,一定要注意,非一级菜单的parent_id一定要指定为上级菜单的ID号,否则你的菜单是不会显示出来的:)

好了!有了数据库,下面就是通过php,JavaScript把菜单从数据库中读出来,并显示出来了:)

1、JavaScript脚本:

functionShowMenu(MenuID)

{

if(MenuID.style.display=="none")

{

MenuID.style.display="";

}

else

{

MenuID.style.display="none";

}

}

这个脚本很简单,就是用来响应点击某个菜单被点击的事件的。

2、CSS文件:

TD{

FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;LINE-HEIGHT:130%;letter-spacing:1px

}

A:link{

COLOR:#990000;FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;TEXT-DECORATION:none;letter-spacing:1px

}

A:visited{

COLOR:#990000;FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;TEXT-DECORATION:none;letter-spacing:1px

}

A:active{

COLOR:#990000;FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;TEXT-DECORATION:none;letter-spacing:1px

}

A:hover{

COLOR:#ff0000;FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;TEXT-DECORATION:underline;letter-spacing:1px

}

.Menu{

COLOR:#000000;FONT-FAMILY:"Verdana","宋体";FONT-SIZE:12px;CURSOR:hand

}

定义了一些基本的样式信息,比如字体,颜色,超级连接的样式等,如果你想改变样式的话,只要修改这里就行了!

3、下面就是我的php页面了!

//基本变量设置

$GLOBALS["ID"]=1;//用来跟踪下拉菜单的ID号

$layer=1;//用来跟踪当前菜单的级数

字号: | 推荐给好友

21/212>

评分:0

我来说两句