DEDECMS在任意页面获取任意栏目N级列表链接

在DEDECMS里获取顶级栏目很简单,一句 {dede:channel}{/dede:channel} 即可搞定。但有时我们需要在任意页面获取任意顶级栏目下的二级和三级栏目列表的链接, {dede:channel} 就无能为力了。注意,我说的是在“任意”(首页、封面、列表、文章等)页面调用“任意”二或三级栏目列表。

OK,一步步来,先第一个。(适用dedecmsV4,V5.X未测试。)

感谢双赢朋友帮忙测试。原来的函数在某些主机上进行生成html操作会提示 inc_channel_unit_functions.php 出错,现已改正。大家可放心使用。有问题请留言或点击QQ即时交流。

一、在任意页面获取某顶级栏目下的二级栏目列表

例如,我们要在首页或其他页面插入 产品展示 这个顶级栏目的下级栏目列表,

1、在 /include/inc_functions.php 最后的 ?> 前加入以下代码:

//在任意页面获取某顶级栏目下的二级栏目列表 用于channel标记 $typeid为顶级栏目ID
function getProductClass($typeid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("select typedir,typename from #@__arctype where reID = '$typeid' order by sortrank");
 $dsql->Execute();
 while($row=$dsql->GetObject())
 { 
  $typelink = GetTypeUrl($row->ID,MfTypedir($row->typedir),$row->isdefault,$row->defaultname,$row->ispart,$row->namerule2);
  $linkList .= "<li>·<a href=\"$typelink\">".$row->typename."</a></li>\n   ";
 }
 $dsql->Close();
 return $linkList;
}

2、在模板里用

 {dede:channel function='getProductClass(2)'}{/dede:channel} 

调用即可。这里getProductClass(2)中的 2 是产品展示的栏目ID。如果你的是其他的,请作相应修改。

3、效果如下:

大小: 6.62 K
尺寸: 237 x 157
浏览: 208 次
点击打开新窗口浏览全图

更新:

4、伪静态的话请用以下代码:

//在任意页面获取某顶级栏目下的二级栏目列表 用于channel标记 $typeid为顶级栏目ID (用于伪静态)
function getProductClass($typeid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("select ID,typename from #@__arctype where reID = '$typeid' order by sortrank");
 $dsql->Execute();
 while($row=$dsql->GetObject())
 { 
  $typelink = GetTypeUrl($row->ID,MfTypedir($row->typedir),$row->isdefault,$row->defaultname,$row->ispart,$row->namerule2);
  $linkList .= "<li>·<a href=\"/list-".$row->ID.".html\">".$row->typename."</a></li>\n   ";
 }
 $dsql->Close();
 return $linkList;
}

(DEDECMS全站伪静态请看这里:DEDECMS全站(首页、列表、文章页)伪静态详细教程

二、在任意页面获取某顶级栏目下的二级栏目和三级栏目列表(树形菜单)

这里其实是取得一个树形菜单,共两级,如要多级的话,请自行参照修改。

1、在 /include/inc_functions.php 最后的 ?> 前加入以下代码:

//在任意页面获取某顶级栏目下的二级栏目和三级栏目列表 用于channel标记 $typeid为顶级栏目ID
function getProductTree($typeid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("select ID,typedir,typename from #@__arctype where reID = '$typeid' order by sortrank");
 $dsql->Execute();
 while($row=$dsql->GetObject())
 { 
  $typelink = GetTypeUrl($row->ID,MfTypedir($row->typedir),$row->isdefault,$row->defaultname,$row->ispart,$row->namerule2);
  $linkList .= "\n<li><a href=\"$typelink\"><b>".$row->typename."</b></a></li>\n\n";
  $linkList .= getSonClass($row->ID);
 }
 $dsql->Close();
 return $linkList;
}
//获得小类栏目链接
function getSonClass($parentid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("Select ID,typedir,typename From #@__arctype where reID='$parentid' order by sortrank");
 $dsql->Execute($parentid);
 while($row=$dsql->GetObject($parentid))
 {
  $typelink = GetTypeUrl($row->ID,MfTypedir($row->typedir),$row->isdefault,$row->defaultname,$row->ispart,$row->namerule2);
  $linkList .= "<li class=\"smallclass\"><a href=\"$typelink\">".$row->typename."</a></li>\n";
 }
 return $linkList;
}

2、在模板里用

 {dede:channel function='getProductTree(2)'}{/dede:channel} 

调用即可。这里getProductTree(2)中的 2 是产品展示的栏目ID。如果你的是其他的,请作相应修改。

3、效果如下:

大小: 17.05 K
尺寸: 216 x 361
浏览: 208 次
点击打开新窗口浏览全图

4、产生的代码如下:

<li><a href="/product/ac-dc/"><b>AC/DC开关电源</b></a></li>

<li class="smallclass"><a href="/product/ac-dc/1-way/">一路输出10W-350W</a></li>
<li class="smallclass"><a href="/product/ac-dc/2-way/">二路输出15W-200W</a></li>
<li class="smallclass"><a href="/product/ac-dc/3-way/">三路输出15W-200W</a></li>
<li class="smallclass"><a href="/product/ac-dc/4-way/">四路输出30W-200W</a></li>

<li><a href="/product/dc-dc/"><b>DC/DC开关电源</b></a></li>

<li class="smallclass"><a href="/product/dc-dc/1-way/">一路输出10W-200W</a></li>
<li class="smallclass"><a href="/product/dc-dc/2-way/">二路输出10W-150W</a></li>
<li class="smallclass"><a href="/product/dc-dc/3-way/">三路输出10W-150W</a></li>
<li class="smallclass"><a href="/product/dc-dc/4-way/">四路输出10W-150W</a></li>
。。。

在CSS里你就可以对 .smallclass 设置样式,如不同背景和缩进等。

更新:

5、伪静态的话请用以下代码:

/*------------------------------------------------------
在任意页面获取某顶级栏目下的二级栏目和三级栏目列表 用于channel标记 (用于伪静态)
------------------------------------------------------*/
//获得大类栏目链接
function getProductTree($typeid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("select ID,typename from #@__arctype where reID = '$typeid' order by sortrank");
 $dsql->Execute();
 while($row=$dsql->GetObject())
 { 
  $linkList .= "\n<li><a href=\"/list-".$row->ID.".html\"><b>".$row->typename."</b></a></li>\n\n";
  $linkList .= getSonClass($row->ID);
 }
 $dsql->Close();
 return $linkList;
}
//获得小类栏目链接
function getSonClass($parentid)
{
 $linkList = "";
 $dsql = new DedeSql(false);
 $dsql->SetQuery("Select ID,typename From #@__arctype where reID='$parentid' order by sortrank");
 $dsql->Execute($parentid);
 while($row=$dsql->GetObject($parentid))
 {
  $linkList .= "<li class=\"smallclass\"><a href=\"/list-".$row->ID.".html\">".$row->typename."</a></li>\n";
 }
 return $linkList;
}

(DEDE全站伪静态请看这里:DEDECMS全站(首页、列表、文章页)伪静态详细教程

最诱人的更新:

三、在任意页面获取顶级栏目和二级栏目列表

1、在 /include/inc_functions.php 最后的 ?> 前加入以下代码:

加入第二点[二、在任意页面获取某顶级栏目下的二级栏目和三级栏目列表(树形菜单)]的两个函数,然后把第一个函数 function getProductTree($typeid) 里的:

select ID,typedir,typename from #@__arctype where reID = '$typeid' order by sortrank 改为:

select ID,typedir,typename from #@__arctype where reID = '0' order by sortrank 就是把 $typeid 改为 0 。 

2、在模板里用  {dede:channel function='getProductTree()'}{/dede:channel} 调用即可。效果如下图:

大小: 3.75 K
尺寸: 86 x 116
浏览: 187 次
点击打开新窗口浏览全图

3、你可举一反三做成N级栏目列表调用,具体我不写了。

=====

看到这里,你是不是有什么想法?对了,可以参照这里改一下做二级滑动导航栏!哈哈,DEDE还是挺好用的。

Trackbacks: 点击获得Trackback地址,Encode: UTF-8  点击获得Trackback地址,Encode: GB2312 or GBK  点击获得Trackback地址,Encode: BIG5
Tags: 栏目列表 | 分类:DedeCms
浏览概况:评论:7 | 阅读:16173
文章评论(7)
[1楼] [引用] [TOP]
dd 发表于 2008, October 30, 6:38 PM
dede论坛里都没人回答 终于找到了
[2楼] [引用] [TOP]
dede热 发表于 2008, November 13, 7:57 PM
谢谢,真的不错,找了好久
[3楼] [引用] [TOP]
123 发表于 2009, March 28, 1:35 PM
有没有适合5.1版本的啊
[4楼] [引用] [TOP]
Copterfly 发表于 2009, March 29, 12:58 PM
5.X以上的版本没啥研究,其实大同小异的,自己对照一下我写的改改。
[5楼] [引用] [TOP]
你好 发表于 2009, May 27, 6:51 PM
调用的栏目地址怎么都是当前栏目地址啊,比如在首页 所有的栏目的网址就是 根目录/index.html
在其他页面 所有的栏目的网址就是 分类目录/index.html
[6楼] [引用] [TOP]
Copterfly 发表于 2009, May 28, 8:52 AM
请对照版本4.0,我的没问题。
[7楼] [引用] [TOP]
cc 发表于 2010, April 26, 11:53 PM
在dedecms里如何调用上级栏目的ID
发表评论
用户名:
密码(游客无需):
网址/E-mail:
      记住我的信息