在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 " ";
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
|