您现在的位置是:首页
>
递归函数c语言例题解析 函数递归实现php和MySQL动态树型菜单
函数递归实现 h 和MySQL动态树型菜单 树型菜单在很多桌面应用系统中都有非常广泛的应用 其主要优点是结构清晰 利于使用者非常清楚的知道目前自己所在的位置 但在we 上树型菜单的应用因为没有理想

函数递归实现php和MySQL动态树型菜单
树型菜单在很多桌面应用系统中都有非常广泛的应用 其主要优点是结构清晰 利于使用者非常清楚的知道目前自己所在的位置 但在web上树型菜单的应用因为没有理想的现成组件可以拿过来直接使用 所以一般的情况下 程序员主要是通过JavaScript来实现一些简单的树型结构菜单 但这些菜单往往都是事先定好各菜单项目 以及各菜单项目之间的层次关系 不利于扩充 一旦需要另一个菜单结构时 往往还需要重新编写 因此使用起来不是很方便 经过对函数递归的研究 我发现这种树型菜单可以通过递归函数 使树型菜单的显示实现动态变化 并没有级数的限制 下面就是我用php MySQL JavaScript写的一个动态树型菜单的处理代码 如果大家有兴趣的话 就和我一起来看看我是如何实现的吧 ) 首先 我们需要一个数据库 在这个数据库中 我们建立以下一张表 CREATE TABLE menu ( id tinyint( ) NOT NULL auto_increment parent_id tinyint( ) DEFAULT NOT NULL name varchar( ) url varchar( ) PRIMARY KEY (id) ); 这张表中 id 为索引 parent_id 用来保存上一级菜单的id号 如果是一级菜单则为 name 为菜单的名称 也就是要在页面上显示的菜单内容 url 如果某菜单为末级菜单 则需要指定该连接的url地址 这个字段就是用来保存此地址的 其他非末级菜单 该字段为空 好了 数据库有了 你就可以添加一些记录了 下面是我做测试的时候 使用的一些记录 INSERT INTO menu VALUES ( 人事管理 ); INSERT INTO menu VALUES ( 通讯交流 ); INSERT INTO menu VALUES ( 档案管理 ); INSERT INTO menu VALUES ( 考勤管理 ); INSERT INTO menu VALUES ( 通讯录 ); INSERT INTO menu VALUES ( 网络会议 ); INSERT INTO menu VALUES ( 新增档案 ); INSERT INTO menu VALUES ( 查询档案 ); INSERT INTO menu VALUES ( 删除档案 ); INSERT INTO menu VALUES ( 新增通讯记录 ); INSERT INTO menu VALUES ( 查询通讯记录 ); INSERT INTO menu VALUES ( 删除通讯记录 ); INSERT INTO menu VALUES ( 召开会议 ); INSERT INTO menu VALUES ( 会议查询 ); 在添加记录的时候 一定要注意 非一级菜单的parent_id一定要指定为上级菜单的ID号 否则你的菜单是不会显示出来的 ) 好了!有了数据库 下面就是通过php JavaScript把菜单从数据库中读出来 并显示出来了 ) JavaScript脚本 function ShowMenu(MenuID) { if(MenuID style display== none ) { MenuID style display= ; } else { MenuID style display= none ; } } 这个脚本很简单 就是用来响应点击某个菜单被点击的事件的 CSS文件 <! 表格样式 > TD { FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; LINE HEIGHT: %; letter spacing: px } <! 超级连接样式 > A:link { COLOR: # ; FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; TEXT DECORATION: none; letter spacing: px } A:visited { COLOR: # ; FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; TEXT DECORATION: none; letter spacing: px } A:active { COLOR: # ; FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; TEXT DECORATION: none; letter spacing: px } A:hover { COLOR: #ff ; FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; TEXT DECORATION: underline; letter spacing: px } <! 其他样式 > Menu { COLOR:# ; FONT FAMILY: Verdana 宋体 ; FONT SIZE: px; CURSOR: hand } 定义了一些基本的样式信息 比如字体 颜色 超级连接的样式等 如果你想改变样式的话 只要修改这里就行了! 下面就是我的php页面了! <> <head> <link rel=stylesheet> <script language= JavaScript src= TreeMenu js ></script> </head> <body> <?php //基本变量设置 $GLOBALS[ ID ] = ; //用来跟踪下拉菜单的ID号 $layer= ; //用来跟踪当前菜单的级数 //连接数据库 $Con=mysql_connect( localhost root ); mysql_select_db( work ); //提取一级菜单 $sql= select * from menu where parent_id= ; $result=mysql_query($sql $Con); //如果一级菜单存在则开始菜单的显示 if(mysql_num_rows($result)> ) ShowTreeMenu($Con $result $layer $ID); //============================================= //显示树型菜单函数 ShowTreeMenu($con $result $layer) //$con 数据库连接 //$result 需要显示的菜单记录集 //layer 需要显示的菜单的级数 //============================================= function ShowTreeMenu($Con $result $layer) { //取得需要显示的菜单的项目数 $numrows=mysql_num_rows($result); //开始显示菜单 每个子菜单都用一个表格来表示 echo <table cellpadding= cellspacing= border= > ; for($rows= ;$rows<$numrows;$rows++) { //将当前菜单项目的内容导入数组 $menu=mysql_fetch_array($result); //提取菜单项目的子菜单记录集 $sql= select * from menu where parent_id=$menu[id] ; $result_sub=mysql_query($sql $Con); echo <tr> ; //如果该菜单项目有子菜单 则添加JavaScript onClick语句 if(mysql_num_rows($result_sub)> ) { echo <td width= ><img src= folder gif border= ></td> ; echo <td class= Menu onClick= javascript:ShowMenu(Menu $GLOBALS[ ID ] ); > ; } else { echo <td width= ><img src= file gif border= ></td> ; echo <td class= Menu > ; } //如果该菜单项目没有子菜单 并指定了超级连接地址 则指定为超级连接 //否则只显示菜单名称 if($menu[url]!= ) echo <a $menu[url] >$menu[name]</a> ; else echo $menu[name]; echo </td> </tr> ; //如果该菜单项目有子菜单 则显示子菜单 if(mysql_num_rows($result_sub)> ) { //指定该子菜单的ID和style 以便和onClick语句相对应 echo <tr id=Menu $GLOBALS[ ID ]++ style= display:none > ; echo <td width= > </td> ; echo <td> ; //将级数加 $layer++; //递归调用ShowTreeMenu()函数 生成子菜单 ShowTreeMenu($Con $result_sub $layer); //子菜单处理完成 返回到递归的上一层 将级数减 $layer ; echo </td></tr> ; } //继续显示下一个菜单项目 } echo </table> ; } ?> </body> </> 在上面的php页面里面 我定义了一个函数ShowTreeMenu() 通过这个函数的调用 会从数据库中递归的调出每个菜单项目 并显示在页面上了 ) lishixinzhi/Article/program/MySQL/201311/29410 很赞哦! (1033)