知识大全 函数递归实现php和MySQL动态树型菜单
Posted 菜单
篇首语:学问勤中得,富裕俭中来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 函数递归实现php和MySQL动态树型菜单相关的知识,希望对你有一定的参考价值。
函数递归实现php和MySQL动态树型菜单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
树型菜单在很多桌面应用系统中都有非常广泛的应用 其主要优点是结构清晰 利于使用者非常清楚的知道目前自己所在的位置 但在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() 通过这个函数的调用 会从数据库中递归的调出每个菜单项目 并显示在页面上了 ) cha138/Article/program/MySQL/201311/29410相关参考
知识大全 Apache+PHP+MySQL建立数据库驱动的动态网站
Apache+PHP+MySQL建立数据库驱动的动态网站 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
使用SQLSERVER2005/2008递归CTE查询树型结构的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
作者flyblue 实现论坛树型结构的算法很多具体你可以去的全文搜索中查询我现在的JSP论坛采用的也是当中的一种不用递归实现树型结构的算法现在我将论坛树型结构的具体算法和大家介绍一下和大家一起交
JAVA中用递归函数来删除子目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java是一门强
PHP递归调用的小技巧讲解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在PHP的实际编码中当
本篇文章是对php中session_set_save_handler函数的用法(mysql)进行了详细的分析介绍需要的朋友参考下 复制代码代码如下:<?php/*===========
初学入门PHP和MySQL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我想要使用要使用PHP
用MySQL和PHP创建XML 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! XML是作为数据交
PHP中时间和日期函数总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!PHP中所有函数都是UNI
PHP和MySQL开发的8个技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! LAMP架构的网