您现在的位置是:首页 >

递归函数c语言例题解析 函数递归实现php和MySQL动态树型菜单

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

函数递归实现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  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码