昨天发了一个无限树形列表程序
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` (
`columnid` int(4) NOT NULL default '0',
`columnfatherid` int(4) NOT NULL default '0',
`columnname` varchar(100) NOT NULL default '',
PRIMARY KEY (`columnid`)
) ;
[Copy to clipboard]
PHP CODE:
INSERT INTO `cms_column` (`columnid`, `columnfatherid`, `columnname`) VALUES
(1, 0, '美丽杭州'),
(2, 0, '体育娱乐'),
(3, 1, '星球速递'),
(4, 0, '快乐童年'),
(5, 4, '喜欢各自'),
(6, 5, '发奋图强'),
(7, 2, '北京奥运'),
(9, 0, '星球追寻'),
(10, 0, '你我分享'),
(11, 0, '安静水月'),
(12, 0, '寒星点点'),
(13, 0, '月光韬晦'),
(14, 0, '韬光养晦');
下面是类[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类实现的,各位朋友自己修改啦。