| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
关于用数组生成树形菜单的问题,请高手指教。http://www.iyit.net 日期:2006-10-6 15:36:12 来源:iyit.net收集 点击: |
$item1 = array( array('name' => 'a', 'url' => 'action.php?action=a'),array('name' => 'b', 'url' => 'action.php?action=b')); $item2 = array( array('name' => 'c', 'url' => 'action.php?action=c'),array('name' => 'd', 'url' => 'action.php?action=d')); $item3 = array( array('name' => 'e', 'url' => 'action.php?action=e'),array('name' => 'f', 'url' => 'action.php?action=r')); $item4 = array( array('name' => 'g', 'url' => 'action.php?action=g'),array('name' => 'h', 'url' => 'action.php?action=h')); $menu1 = array( array('title' => '高级1', 'item' => $item1),array('title' => '高级2','item' => $item2); $menu2 = array( array('title' => '高级3', 'item' => $item3),array('title' => '高级4','item' => $item4); $pmenu = array(array('class'=>'顶级1','menu'=>$menu1),array('class'=>'顶级2','menu'=>$menu2)) 现在是想用上面的数组生成如csdn左侧的树形菜单,只能用php来实现,不能用js或xml。要求树形的每一个节点都能展开和收拢并互不影响。 生成的形式如 顶级1 ¦ ¦--高级1 ¦ ¦ ¦ ¦---a ¦ ¦---b ¦ ¦--高级2 ¦ ¦ ¦ ¦---c ¦ ¦---d ¦ 顶级2 ¦ ¦--高级3 ¦ ¦ ¦ ¦---e ¦ ¦---f ¦ ¦--高级4 ¦ ¦ ¦ ¦---g ¦ ¦---h 本想用函数来实现,没有成功,所以提到这里来了。敬请指教! --------------------------------------------------------------- 先说一点 [要求树形的每一个节点都能展开和收拢并互不影响。] 这个有点困难 用session来记录目前处于打开状态的结点列表吧 讨论一哈 --------------------------------------------------------------- <?php $item1 = array( array('name' => 'a', 'url' => 'action.php?action=a'),array('name' => 'b', 'url' => 'action.php?action=b')); $item2 = array( array('name' => 'c', 'url' => 'action.php?action=c'),array('name' => 'd', 'url' => 'action.php?action=d')); $item3 = array( array('name' => 'e', 'url' => 'action.php?action=e'),array('name' => 'f', 'url' => 'action.php?action=r')); $item4 = array( array('name' => 'g', 'url' => 'action.php?action=g'),array('name' => 'h', 'url' => 'action.php?action=h')); $menu1 = array( array('title' => '高级1', 'item' => $item1),array('title' => '高级2','item' => $item2)); $menu2 = array( array('title' => '高级3', 'item' => $item3),array('title' => '高级4','item' => $item4)); $pmenu = array(array('class'=>'顶级1','menu'=>$menu1),array('class'=>'顶级2','menu'=>$menu2)); ?> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=gb2312"> <title>无标题文档</title> <script language="javascript"> <!-- function clickmenu(thisid){ obj=eval(thisid); if(obj.style.display=="") obj.style.display='none'; else obj.style.display=''; } //--> </script> </head> <body> <?php while(list($key,$class)=each($pmenu)){ ?> <table width="150" border="1" cellspacing="0" bordercolor="#0066ff"> <tr> <td onclick="clickmenu('<?php echo "menu".$key;?>')"><?php echo $class["class"]; ?></td> </tr> <tr> <td> <div id="<?php echo "menu".$key;?>" style="display:none"> <?php while(list($key1,$title)=each($class["menu"])){ ?><table width="150" border="1" cellspacing="0" bordercolor="#0066ff"> <tr> <td onclick="clickmenu('<?php echo "menu".$key."item".$key1;?>')"><?php echo $title["title"]; ?></td> </tr> <tr> <td> <div id="<?php echo "menu".$key."item".$key1;?>" style="display:none"><table width="150" border="1" cellspacing="0" bordercolor="#0066ff"> <?php while(list($key2,$name)=each($title["item"])){ ?> <tr> <td><?php echo $name["name"]; ?></td> </tr> <?php } ?> </table></div> </td> </tr> </table> <?php } ?></div> </td> </tr> </table> <?php } ?> </body> </html> --------------------------------------------------------------- to:ustb(偶然) 你用纯php生成不闲效率低吗?每次点hit都要重新生成页面。不划算啊。 --------------------------------------------------------------- <?php session_start(); ?> <pre> 方案一 php版本4.3.2 设由session保存节点状态信息 初态:仅显示“顶级”节点 <?php $item1 = array( array('text' => 'a', 'url' => 'action.php?action=a'),array('text' => 'b', 'url' => 'action.php?action=b')); $item2 = array( array('text' => 'c', 'url' => 'action.php?action=c'),array('text' => 'd', 'url' => 'action.php?action=d')); $item3 = array( array('text' => 'e', 'url' => 'action.php?action=e'),array('text' => 'f', 'url' => 'action.php?action=r')); $item4 = array( array('text' => 'g', 'url' => 'action.php?action=g'),array('text' => 'h', 'url' => 'action.php?action=h')); $menu1 = array( array('text' => '高级1', 'item' => $item1),array('text' => '高级2','item' => $item2)); $menu2 = array( array('text' => '高级3', 'item' => $item3),array('text' => '高级4','item' => $item4)); $pmenu = array(array('text'=>'顶级1','item'=>$menu1),array('text'=>'顶级2','item'=>$menu2)); function tree($menu,$point=-1,$deep=0) { //构造状态信息 static $info; static $num; if($deep == 0) { $info = array(); $num = 0; } foreach($menu as $k=>$v) { $tmp = $v; unset($tmp['item']); $info[] = array(item=>$tmp,deep=>$deep,child=>(is_array($v['item'])?count($v['item']):0)); if(is_array($v['item'])) tree($v['item'],"",$deep+1); } if($deep != 0) return; //至此已将数状的结构平面化了 //print_r($info); // 查看平面化结果 if(! isset($_session['menu_info'])) { // 如果尚未定义菜单状态信息 $menu_info = str_repeat("0",count($info)); $_session['menu_info'] = $menu_info; }else $menu_info = $_session['menu_info']; echo "$menu_info\n"; //查看菜单状态信息 //调整菜单状态 if($point >= 0) { $ch = $menu_info[$point]; //取得指定的节点的状态 $menu_info[$point] = $ch = $ch=="1"?"0":"1"; //置反节点状态 $deep = $info[$point]['deep']; //取得当前的深度 for($i=$point+1;$info[$i]['deep']>$deep;$i++) { //向深度方向 $menu_info[$i] = "0"; //不管三七二十一,先关了再说 } if($ch == "1") { //如果不是关闭 for($i=$point+1;$info[$i]['deep']>$deep;$i++) { //向深度方向 if($info[$i]['deep'] == $deep+1) { $menu_info[$i] = "1"; } } } $_session['menu_info'] = $menu_info; //保存修改 } echo "$menu_info\n"; //再次查看菜单状态信息 //显示菜单 for($i=0;$i<strlen($menu_info);$i++) if($menu_info[$i] == "1" ¦ ¦ $info[$i]['deep'] == 0) { echo str_repeat("\t",$info[$i]['deep']).$info[$i]['item']['text']; if(isset($info[$i]['item']['url'])) echo "[".$info[$i]['item']['url']."]"; else echo "($i)"; echo "\n"; } } tree($pmenu); tree($pmenu,0); //展开第一分支 ?> 不过这样写要被 mikespook(mike大懒猫) 指责“不遵守软件工程的规范”了 至于如何传递和接收参数就有你决定了 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:今天遇到一个棘手的问题,就是打开窗口,别以为简单 下一篇:如何再mysql中存储数组? 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | ||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||