无限级别菜单的实现

?/*
看到很多朋友问过无限级别菜单的的问题,我曾经用老大提供的代码写出来过无限级别的菜单,但是感觉效果不是很好,于是趁着夜深人静就写这个无限制级别的菜单,其实道理很简单,主要是数据表的设计,还有递归方法的使用,我会在下面给出数据结构的设计,这里我没有加上竖直的虚线,同时Sql语句我也将其固定,大家可以根据自己的需要来修改!如果有问题可以联系我:msn:banneryue@sina.com,QQ:7665656,E_mail:yuepengfei@mail.banner.com.cn明天我会提供一个测试页面让大家来看*//**
递归显示子节点函数* ** @param $SearchPattern查找的条件* @param
$BaseNum 节点的层数*/function
ListChildTree($SearchPattern,$BaseNum){global
$Tree;//声明连接数据库的句柄为全局$Sql=select
DepartmentId,DepartmentName from test where DepartmentId like
‘$SearchPattern’;//查找孩子节点$QueryChild=$Tree-query($Sql);while($Result=$Tree-fetch_array($QueryChild))
{
//取出孩子节点$Space=;for($j=0;$j((strlen($SearchPattern)/3)-$BaseNum);$j++)$Space.=;//设置显示节点前面的距离,这里的空格的html被这里自动替换成了$ChildDepartment=trim($Result[0]).___;$ChildSql=select
count(*) from test where DepartmentId like
‘$ChildDepartment’;//查找孩子节点的孩子节点$ChildResult=$Tree-query_first($ChildSql);$TableId=ta.trim($Result[0]);
//设置表格Id$TablePic=ta.trim($Result[0]).pic;//设置图片Idif($ChildResult[0]1){//如果没有找到孩子节点的节点,则显示-图片?trtd?=$Space?span
align=absmiddleimg src=leaf.gif border=0 align=absmiddle width=35
height=17/spanfont size=2A
href=process.php?SearchPattern=?=trim($Result[0])?
class=F1?=$Result[1]?/a/fonttable id=?=$TableId? style=display=none
cellspacing=0 cellpadding=0?}else{//找到则显示+图片?trtd?=$Space?a
onclick=javascript:expands(‘?=$TableId?’,’?=$TablePic?’)
style=cursor:handspan align=absmiddleimg id=?=$TablePic? src=parent.gif
border=0 align=absmiddle width=35 height=17/span/afont size=2A
href=process.php?SearchPattern=?=trim($Result[0])?
class=F1?=$Result[1]?/a/fonttable id=?=$TableId? style=display=none
cellspacing=0
cellpadding=0?ListChildTree($ChildDepartment,$BaseNum);//递归调用函数本身来显示其他孩子节点}//end
if?/table?}//end while}//end
function?htmlheadtitle无限级菜单测试/titlemeta content=text/html;
charset=gb2312link rel=stylesheet href=../text.css type=text/cssscript
language=javascriptfunction expands(expid,picid)
//显示图片张合的Js{//alert(this.document.all[+expid+].style.display);if(this.document.all[expid].style.display==none){
this.document.all[expid]澳门新葡亰3522平台游戏,.style.display=block;this.document.all[picid].src=leaf.gif;}else{this.document.all[expid].style.display=none;this.document.all[picid].src=parent.gif;}}/script/headbody
bgcolor=#FFFFFF text=#000000?require(do_mySql.php);$Tree = new
DB_Sql;$Tree-connect();//连接数据库,可根据需要换成自己的代码$Sql=select
DepartmentId,DepartmentName from test where
length(DepartmentId)=3;//提出最上层节点,根据需要自己修改$Result=$Tree-query_first($Sql);?div
align=centercentertable border=1 cellpadding=0 cellspacing=0 width=766
bordercolor=#DDCF90 height=392trtd valign=topdiv align=centertable
border=0 cellpadding=0 cellspacing=0 width=372trtd width=368a
onclick=javascript:expands(‘dwtop’,’dwimg’) style=cursor:handspan
align=absmiddle img id=dwimg SRC=parent.gif border=0 align=absmiddle
width=35 height=17/span/afont size=2a
href=process.php?SearchPattern=?=$Result[0]??=$Result[1]?/a/fonttable
id=dwtop style=display=none cellspacing=0
cellpadding=0?$FirstDepartment=$Result[0];$BaseNum=strlen($FirstDepartment)/3;//计算层数,其实这个有点多余,因为其必为第一层$SearchPattern=$FirstDepartment.___;//设置查找条件ListChildTree($SearchPattern,$BaseNum);//显示祖宗节点的孩子节点?/table/td/tr/table/div/td/tr/table/center/div/body/html?/*
表结构的设计由于是测试表设计得非常的简单:CREATE TABLE test (id
mediumint(8) unsigned NOT NULL auto_increment, #流水号DepartmentId
varchar(100) NOT NULL default ”,#单位代号DepartmentName varchar(100)
NOT NULL default ”,#单位名称KEY id
(id))数据插入的代码我在这里就不那出来给大家了数据表的规则为:001为第一级001001为001的第一个子节点,001002为001的第二个子节点001001001为001001的第一个子节点,以此类推……我这里只设置了一个祖宗(001),所以在程序中就直接调用了,可根据需要自己来设置,并对代码作简单的修改即可!好了,就到这里了,如果大家有问题欢迎和我探讨!最好祝大家今天工作愉快!先吸颗烟在睡觉!好累!*/?