用PHP建立不需javascript支持的菜单系统
在phpbuilder上看到的一篇好文章,我想对于很多想用php建立不用js的菜单的朋友很有启发意义,
不过中间可能有些地方翻译的不好,呵呵,请见谅(我的E文会进步的!)。


以下提供一段简单的建立菜单系统的php代码,可适用于的IE和Netscape浏览器,仅供参考。

主要特点:
1. 可以以多个框架为目标页面
   菜单的URL可以指向任何框架或窗口。
2. 显示主菜单开关状态
   不需JavaScript支持,通过点击主菜单项目可以显示和隐藏其子菜单。
3. 主菜单项目可以使用图片或普通文本替代显示。


你要做的事情:

1. 首先建立你的菜单开始页面。如:
<FRAMESET COLS="30%,*">
  <FRAME SRC="menux.php" NAME="MENU_FRAME">
  <FRAMESET ROWS="50%,*">
     <FRAME SRC="1.htm" NAME="TOP_FRAME">
     <FRAME SRC="2.htm" NAME="RIGHT_FRAME">
  </FRAMESET>
</FRAMESET>

将其存为index.html

下面要显示的代码是menux.php程序。
文件 1.htm 是TOP_FRAME的首页。
文件 2.htm 是RIGHT_FRAME的首页。
你可以随意定义多个FRAME,然后可用menux.php程序来协调。

2. 现在开始建立菜单(menux.php):
<?php
/*

菜单层次:
********************

主菜单配置
菜单标题|菜单图片(如果有)

子菜单配置
子菜单标题|子菜单URL|目标框架

"|"是用来分隔各个部分的符号

*/

// 默认目标框架(如果没有提供)
$DEFAULT_FRAME "RIGHT_FRAME";

// 主菜单及其子菜单项目
$all_menu = array(
"This is menu 1|menu1.gif" => array
 ( 
0,
  
"Sun Page|intro.html|RIGHT_FRAME",
  
"Moon Page|www.xyz.com/moon.php?x=123|TOP_FRAME",
  
"Star Page|www.geocities.com|RIGHT_FRAME"),

"This is menu 2|menu2.gif" => array    
 ( 
0,
  
"<img src='xyz.gif'>|mn21.html|RIGHT_FRAME",  // using image ...
  
"Hello Page|mn22.html|RIGHT_FRAME",
  
"Any Page|mn23.html|TOP_FRAME"),

"This is menu 3|menu3.gif" => array  
 ( 
0,
  
"Lion Page|mn31.html|RIGHT_FRAME",
  
"Swan Page|mn32.html|TOP_FRAME",
  
"Tiger Page|mn33.html|RIGHT_FRAME",
  
"Rabbit Page|mn34.html|TOP_FRAME")
);

function 
generate_menu($arr,$on_off)
{
 global 
$DEFAULT_FRAME;

 
// 此处用来改变主菜单开关状态
 
if ($on_off)
  {
  for (
$i=0;$i<strlen($on_off);$i++)
      {
      
$addr current($arr);
      
$addr[0]=substr($on_off,$i,1)+0;
      
$arr[key($arr)]=$addr;
      @
next($arr);
      }
  }

 
$on_off "";
 
reset($arr);
 while (list(
$k,$v)=each($arr)) $on_off .= $v[0];

 
$i=0;
 
reset($arr);
 while (list(
$k,$v)=each($arr)) 
     {
     
$title explode("|",$k);
     if (
trim($title[1]))
        
$title "<IMG SRC='$title[1]' ALT='$title[0]'>";
     else
        
$title $title[0];

     
// 若主菜单打开,则列出其子菜单
     
if ($v[0])
        {
        
$temp substr($on_off,0,$i)."0".substr($on_off,$i+1);
        print 
"<A Href='menux.php?on_off=$temp'>".
              
$title."</A>n";
        for (
$j=1;$j<count($v);$j++)
            {
            
$title explode("|",$v[$j]);
            if (!
trim($title[2])) $title[2]=$DEFAULT_FRAME;
            
$temp "TARGET='$title[2]'";
            print 
"&nbsp;&nbsp;&nbsp;";
            print 
"<A Href='$title[1]' $temp>".
                  
"$title[0]</a>n";
            }
        }
     else
     
// 若主菜单关闭
        
{
        
$temp substr($on_off,0,$i)."1".substr($on_off,$i+1);
        print 
"<A Href='menux.php?on_off=$temp'>".
              
$title."</A>n";
        }
     
$i++;
     }
}

print 
"<HTML>n<BODY>n";

generate_menu($all_menu$on_off);

print 
"</BODY>n</HTML>n";
?>

再看看第一个主菜单定义的含义:

"This is menu 1|menu1.gif" => array
 ( 0,
  "Sun Page|intro.html|RIGHT_FRAME",
  "Moon Page|www.xyz.com/moon.php?x=123|TOP_FRAME",
  "Star Page|www.geocities.com|RIGHT_FRAME"),

menu1.gif      : 第一个主菜单图片,如果没有则以"this is menu 1"为标题
This is menu 1 : 第一个主菜单的<IMG ALT="">
0              : 初始化主菜单状态,0为关闭,1为打开
Sun Page       : 第一个子菜单标题
intro.html     : 第一个子菜单的URL
RIGHT_FRAME    : 目标框架,如果没有就用$DEFAULT_FRAME