您的位置:首页 -> 网络编程 -> Php编程 -> PHP实例:用PHP实现windows风格的树型菜单
PHP实例:用PHP实现windows风格的树型菜单
发布时间:2007-11-19 来自:网页教学网 作者:mozhiheike 点击:次 字体:[ ]

以下是一个风格类似windows资源管理器的树型菜单,将下面的脚本包含到你的页面中,另外需要从资源管理器中截取一些gif图片,祥见脚本中的注释,菜单结构文件的格式为:

tree level|item text|item link|link target|last item in subtree

例如

以下为引用的内容:

.<b>Demo menu</b>|javascript: alert(This is the demo menu for TreeMenu 1.0);
..<b>目录1</b>
...<b>子目录 1.1</b>
....item 1.1.1|javascript: alert(Item 1.1.1);
....item 1.1.2|javascript: alert(Item 1.1.1);
...item 1.2|javascript: alert(Item 1.2);
...item 1.3|javascript: alert(Item 1.3);
..<b>子目录 2</b>
...item 2.1|javascript: alert(Item 2.1);
...item 2.2|javascript: alert(Item 2.2);
...<b>子目录 2.3</b>
....item 2.3.1|javascript: alert(Item 2.3.1);
....item 2.3.2|javascript: alert(Item 2.3.2);


<?php
// file:tremenu.inc
// PHP TreeMenu
/////////////////
// 初始化 //
/////////////////

treefile = "demomenu.txt";//设置有菜单结构的文件

if(isset(PATH_INFO))
script = PATH_INFO;
else
script = SCRIPT_NAME;

//以下图片可截取windows资源管理器中的相应位置的图

img_expand = "tree_expand.gif";//形如资源管理器中可扩展节点+
img_collapse = "tree_collapse.gif";//形如资源管理器中已扩展节点-
img_line = "tree_vertline.gif";//形如|
img_split = "tree_split.gif";//形如|-
img_end = "tree_end.gif";//形如L
img_leaf = "tree_leaf.gif";//形如o
img_spc = "tree_space.gif";//空白图 中国站长.站

//以下是菜单处理脚本 Chinaz.com

maxlevel=0;
cnt=0;

fd = fopen(treefile, "r");
if (fd==0) die("treemenu.inc : Unable to open file ".treefile);
while (buffer = fgets(fd, 4096))
{
tree[cnt][0]=strspn(buffer,".");
tmp=rtrim(substr(buffer,tree[cnt][0]));
node=explode("|",tmp);
tree[cnt][1]=node[0];
tree[cnt][2]=node[1];
tree[cnt][3]=node[2];
tree[cnt][4]=0;
if (tree[cnt][0] > maxlevel) maxlevel=tree[cnt][0];
cnt++;
}
fclose(fd); Chinaz

for (i=0; i<count(tree); i++)
{
expand[i]=0;
visible[i]=0;
levels[i]=0;
}

if (p!="")
explevels = explode("|",p);
i=0;
while(i<count(explevels))
{
expand[explevels[i]]=1;
i++;
}

lastlevel=maxlevel;
for (i=count(tree)-1; i>=0; i--)
{
if ( tree[i][0] < lastlevel )
for (j=tree[i][0]+1; j <= maxlevel; j++)
levels[j]=0;
if ( levels[tree[i][0]]==0 )
{
levels[tree[i][0]]=1;
tree[i][4]=1;
}
else
tree[i][4]=0;
lastlevel=tree[i][0];
}

for (i=0; i < count(tree); i++)
if (tree[i][0]==1)
visible[i]=1;
for (i=0; i < count(explevels); i++)
{
n=explevels[i];
if ( (visible[n]==1) && (expand[n]==1) )
{
j=n+1;
while ( tree[j][0] > tree[n][0] )
{
if (tree[j][0]==tree[n][0]+1) visible[j]=1;
j++;
}
}
}

for (i=0; i<maxlevel; i++)
levels[i]=1; WwwChinazcom

maxlevel++;

echo "<table cellspacing=0 cellpadding=0 border=0 cols=".(maxlevel+3).">\n";
echo "<tr>";
for (i=0; i<maxlevel; i++)
echo "<td width=16></td>";
echo "<td width=100%>&nbsp;</td></tr>\n";
cnt=0;
while (cnt<count(tree))
{
if (visible[cnt])
{
echo "<tr>";
i=0;
while (i<tree[cnt][0]-1)
{
if (levels[i]==1)
echo "<td><a name=cnt></a><img src=\"".img_line."\"></td>";
else
echo "<td><a name=cnt></a><img src=\"".img_spc."\"></td>";
i++;
}
if (tree[cnt][4]==1)
{
echo "<td><img src=\"".img_end."\"></td>";
levels[tree[cnt][0]-1]=0;
}
else
{


echo "<td><img src=\"".img_split."\"></td>";
levels[tree[cnt][0]-1]=1;
}

if (tree[cnt+1][0]>tree[cnt][0])
{

i=0; params="?p=";
while(i<count(expand))
{
if ( (expand[i]==1) && (cnt!=i) || (expand[i]==0 && cnt==i))
{
params=params.i;
params=params."|";
}
i++;
}

if (expand[cnt]==0)
echo "<td><a href=\"".script.params."#cnt\"><img src=\"".img_expand."\" border=no></a></td>";
else
echo "<td><a href=\"".script.params."#cnt\"><img src=\"".img_collapse."\" border=no></a></td>";
}
else
echo "<td><img src=\"".img_leaf."\"></td>";

if (tree[cnt][2]=="")
echo "<td colspan=".(maxlevel-tree[cnt][0]).">".tree[cnt][1]."</td>";
else
echo "<td colspan=".(maxlevel-tree[cnt][0])."><a href=\"".tree[cnt][2]."\" target=\"".tree[cnt][3]."\">".tree[cnt][1]."</a></td>";
echo "</tr>\n";
}
cnt++;
}
echo "</table>\n";
?>

Chinazcom

WEB基地 相 关 文 章
WEB基地 热 点 评 论
不良举报 网络协会

关于WEB基地 | 广告合作 | 联系我们 | 免责声明 | 网站地图 | 合作伙伴

版权所有:零点网络 京ICP备07020939号 联系方式:hkzj2@163.com

315 web基地