100分请教无限级菜单问题!

clbo 2007-03-29 03:34:09
首先要对DEDECMS有一定了解哦。。。

$T=array();
function getchanneltree($id){
global $T;
if(!$GLOBALS['dbopen']){
$GLOBALS['ppsql'] = new DedeSql();
$GLOBALS['dbopen']=true;
}
$GLOBALS['ppsql'] -> SetQuery("Select * From #@__arctype where reID='$id' order by sortrank ASC");
$GLOBALS['ppsql'] -> Execute($id);
while ($row[$id] = $GLOBALS['ppsql'] -> GetArray($id)) {
$T[$row[$id]['ID']] = $row[$id];
getchanneltree($row[$id]['ID']);
}
return ;
}
function returnchanneltree($id){
getchanneltree($id);
global $T;
require_once(dirname(__FILE__)."/inc_channel_unit_functions.php");
$channeltree = "";
if(is_array($T)){
$pre = "";
$pid = 0;
foreach ($T as $key => $value){
$channellink = GetTypeUrl($value['ID'],$value['typedir'],$value['isdefault'],$value['defaultname'],$value['ispart'],$value['namerule']);
if($value['reID']!=0&&$value['reID']!=$pid){
$pre .="|--";
$pid = $value['reID'];
}
if($value['reID']==0){
$pre = "";
}
$channeltree .= $pre."<a href=$channellink>$value[typename]</a><br />";
}
}
return $channeltree;
}

把这段放到 inc_functions.php 末尾

调用方法:
{dede:field name=field runphp='yes'}@me=returnchanneltree(0);{/dede:field}

这段代码只能处理两级的菜单,三级和三级以上就会出错!
请各位帮忙看看!

谢谢了!!!
...全文
331 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iasky 2007-03-30
  • 打赏
  • 举报
回复
恩,去他的官方问问吧
li1229363 2007-03-30
  • 打赏
  • 举报
回复
二维数组并不是说不能保存无限级联菜单。本来二叉树就是使用的二维数组啊!人家二叉树都能无限级联呢~

一个二位数组,第一维可以保存为父节点的编号(实际上没有什么具体的内容啊!我说的是维度的编号!)。当然了,这样就要你再制作一个数组来保存关于父节点的信息了。第二维中保存子结点的相关信息。这种做法,感觉要出问题了,发现不能无限级联了呗~

不能这样用的说。

相似的说,使用二维数组,的确可以达成无限级联的目的。如果你对二叉树的结构够明白,就指导怎么弄了。不过,现在咱们弄出来的不是使用的二叉树的方式,其原因就是数组可以保存大量的其他信息!而二叉树却只保存父节点和两个子结点。按照利用率来解释,我们的利用率要比二叉树稍微好一些。但是在处理速度上,可能就差一些了。毕竟,越简单的东西,处理速度也越快!

这几天一直在看这方面的东西,想自己写个出来玩玩,上面的说是我的一些想法,根本就没有过脑子……感觉在说谎一样……
xuzuning 2007-03-30
  • 打赏
  • 举报
回复
有什么问题吗?
被 getchanneltree 函数处理后, $T 只是一个二维数组,并且不含层次信息

而对于
{dede:field name=field runphp='yes'}@me=returnchanneltree(0);{/dede:field}
这样的结构,至少需要一个树状数组,才能展现出层次
wangnian11 2007-03-30
  • 打赏
  • 举报
回复
帮顶~~
li1229363 2007-03-30
  • 打赏
  • 举报
回复
递归是王道!再有就是遍历了。如果有专门的程序生成JS文件,那就可以使用遍历的方式构造tree了
fredyj 2007-03-30
  • 打赏
  • 举报
回复
改成递归吧
aivera 2007-03-30
  • 打赏
  • 举报
回复
dedecms?是织梦吗
tony-杨 2007-03-29
  • 打赏
  • 举报
回复
DEDECMS?

不好意思

没用过

真的没办法帮你
Fufay 2007-03-29
  • 打赏
  • 举报
回复
你去 dede 官方问吧。
clbo 2007-03-29
  • 打赏
  • 举报
回复
帮忙看看啊 55555555

解决不了 项目不能进行啊
PleaseDoTellMeWhy 2007-03-29
  • 打赏
  • 举报
回复
..............................................
Fufay 2007-03-29
  • 打赏
  • 举报
回复
很遗憾,没玩过 dede.
clbo 2007-03-29
  • 打赏
  • 举报
回复
大家帮忙看看,谢谢了!

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧