发新话题
打印

无限树形菜单或列表附源码类库版

无限树形菜单或列表附源码类库版

昨天发了一个无限树形列表程序http://www.dophp.net/viewthread.php?tid=1787&pid=10920&page=1&extra=page%3D1#pid10920
是用函数的写的
之后一直在修改 今天完成了类的整理
仓促完成,所以此类仅仅是为了实现而实现功能而功能
没有达到类可以实现N中情况的衍生
这里仅仅实现了无限菜单和无限列表
赶紧放出来让大家看看
有需要的可以下了去
我估计还有很多很多可以修改的地方呢
谁叫这是开源呢
废话不说 看效果
无限菜单

无限列表

首先先建立数据库
[Copy to clipboard]
PHP CODE:
CREATE TABLE IF NOT EXISTS `cms_column` (
  `
columnidint(4NOT NULL default '0',
  `
columnfatheridint(4NOT NULL default '0',
  `
columnnamevarchar(100NOT NULL default '',
   
PRIMARY KEY  (`columnid`)
) ;



[Copy to clipboard]
PHP CODE:
INSERT INTO `cms_column` (`columnid`, `columnfatherid`, `columnname`) VALUES
(10'美丽杭州'),
(
20'体育娱乐'),
(
31'星球速递'),
(
40'快乐童年'),
(
54'喜欢各自'),
(
65'发奋图强'),
(
72'北京奥运'),
(
90'星球追寻'),
(
100'你我分享'),
(
110'安静水月'),
(
120'寒星点点'),
(
130'月光韬晦'),
(
140'韬光养晦');


下面是类
[Copy to clipboard]
PHP CODE:
class TreeList
{
function 
ReturnStr($var)
{
for(
$a=1;$a<=$var;$a++)
$str.="─";
return 
$str;
}
function 
ShowMenu($result)
{
global 
$DB;
static 
$select_str;
while(
$menu=$result->FetchRow())

static 
$layer=0
  
$select_str.= "<option value=".$menu[columnid].">"
  
$select_str.= $this->ReturnStr($layer).$menu[columnname]; 
        
$select_str.= "</option>"
  
$sql="select * from cms_column where columnfatherid=$menu[columnid]"
  
$result_sub=$DB->Execute($sql);
  if(
$result_sub->RecordCount()>0)
  {
     
$layer++;
   
$this->ShowMenu($result_sub);
  }

}
$layer--; 
return 
$select_str;
}
function 
select()
{
global 
$DB;
$list.="<select name=\"columnid\" id=\"columnid\">";
$sql="select * from cms_column where columnfatherid=0 and columnid!=0"
$result=$DB->Execute($sql);
if(
$result->RecordCount()>0
  
$list.=$this->ShowMenu($result); 
$list.="</select>"
return 
$list;
}
   function 
ShowTreeMenu($result
     { 
   global 
$DB,;
   static 
$tree;
       
$tree.="<table cellpadding='0' cellspacing='0' border='0' width='100%'>"
    while(
$menu=$result->FetchRow())
   {
       
$tree.="<tr>"
        
//如果该菜单项目有子菜单,则添加JavaScript onClick语句 
  
$sql="select * from cms_column where columnfatherid=$menu[columnid]"
        
$result_sub=$DB->Execute($sql); 
        if(
$result_sub->RecordCount()>0
        { 
          
$tree.="<td width='20'><img src='../templates/admin/images/plus.png' border='0' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'> </td>"
          
$tree.="<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'>".$menu[columnname]; 
        } 
  else{ 
          
$tree.="<td width='20'><img src='../templates/admin/images/page.png' border='0'> </td>"
          
$tree.="<td class='Menu'>".$menu[columnname]; 
        }
     
$tree"</td></tr>"
     
//如果该菜单项目有子菜单,则显示子菜单
  
$sql="select * from cms_column where columnfatherid=$menu[columnid]"
        
$result_sub=$DB->Execute($sql); 
     if(
$result_sub->RecordCount()>0
     { 
      
//指定该子菜单的ID和style,以便和onClick语句相对应 
      
$tree.="<tr id=Menu".$GLOBALS["ID"]++." style='display:none'>"
      
$tree.="<td width='20'> </td>"
      
$tree.="<td>"
   
     
//将级数加1 
     //$layer++; 
     //递归调用ShowTreeMenu()函数,生成子菜单 
     
$this->ShowTreeMenu($result_sub); 
     
//子菜单处理完成,返回到递归的上一层
     
$tree.="</td></tr>"
  
     } 
   } 
     
$tree.="</table>"
  return 
$tree;
  }
   
//如果一级菜单存在则开始菜单的显示 
   
function tree()
   {
    global 
$DB;
   
$tree.="<script type=\"text/javascript\">";
       
$tree.="function ShowMenu(MenuID)";
       
$tree.="{"
       
$tree.="if(MenuID.style.display==\"none\"){";
       
$tree.="MenuID.style.display=\"\""
       
$tree.="}"
       
$tree.="else{"
       
$tree.="MenuID.style.display=\"none\""
       
$tree.="}"
       
$tree.="}"
       
$tree.="</script>";
  
$GLOBALS["ID"] =1//用来跟踪下拉菜单的ID号 
     
$sql="select * from cms_column where columnfatherid=0 and columnid!=0"
     
$result=$DB->Execute($sql);
     if(
$result->RecordCount()>0
   
$tree.=$this->ShowTreeMenu($result);
  return 
$tree;
   }
}


实现
[Copy to clipboard]
PHP CODE:
$list= new TreeList;
echo 
$list->tree();  //显示无限树形菜单
echo $list->select(); //显示无限树形列表

PS:这是利用adodb类实现的,各位朋友自己修改啦。
附件: 您所在的用户组无法下载或查看附件
交流QQ群2:16142493
智能手机软件下载
PHP新手不可错过一帖
PHP新手如何获得积分
论坛需要你,我们大家需要你!

TOP

PS:这里面有个BUG~~
`columnid`不能为0 要从1开始
或者在递归的时候将columnid=0的给排除掉
文章中我已经改掉了
附件中大家自己下载自己改啊
交流QQ群2:16142493
智能手机软件下载
PHP新手不可错过一帖
PHP新手如何获得积分
论坛需要你,我们大家需要你!

TOP

顶下,这个没用过,谢谢

TOP

发新话题