最常用 - 调用当前栏目的顶级栏目(一级栏目)和当前栏目本身(二级栏目)
这是最常见的需求,比如在面包屑导航或者页面标题中显示“首页 > 产品中心 > 手机”这样的路径。

场景:在文章内容页(article_article.htm)或栏目列表页(category_*.htm)中。
代码示例:
{dede:field name='typename'/}
代码解释:
- 这个标签非常神奇,它会根据你所在的页面自动判断:
- 如果你在页(比如一篇新闻的详情页),它会显示 “二级栏目 > 一级栏目” 的格式,
手机 > 产品中心。 - 如果你在栏目列表页(产品中心”的列表页),它会直接显示 当前栏目的名称,
产品中心。
- 如果你在页(比如一篇新闻的详情页),它会显示 “二级栏目 > 一级栏目” 的格式,
如何只获取一级栏目名称?
有时候你可能只需要一级栏目的名称,比如只想在文章页显示“产品中心”,而不显示“手机”,这时就需要用到更强大的 假设你的栏目结构是: 代码示例: 代码解释: 输出结果: 如果你想同时显示一级和二级栏目,并且都加上链接。 代码示例: 代码解释: 输出结果: 这是一个非常实用的场景,比如做一个主导航,鼠标悬停显示其子栏目。 代码示例: 代码解释: 假设: 输出结果: 重要提示:
在使用 希望这些方法能帮助你解决在 DedeCMS 中调用一二级栏目名称的问题!channel
灵活控制 - 使用
channel 标签调用指定层级的栏目channel 标签是调用栏目的核心标签,功能非常强大,我们可以用它来指定调用哪个栏目以及它的层级。
场景1:在文章内容页,调用当前文章的一级栏目名称。
产品中心 (一级) -> 手机 (二级) -> iPhone 15 (文章)。{dede:channel type='top' typeid=''}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
type='top': 这个参数是关键,它表示只调用顶级栏目(一级栏目)。typeid='': 这个参数留空,表示调用当前栏目所属的顶级栏目,因为我们在文章页,DedeCMS 会自动识别当前文章属于哪个二级栏目,然后找到它的一级父栏目。<a href="/plus/list.php?tid=5">产品中心</a> (假设 产品中心 的 ID 是 5)。
场景2:在文章内容页,调用当前文章的一级栏目和二级栏目名称(并链接)。
{dede:field name='position' runphp='yes'}
$tcids = array();
$tags = explode(',', @me);
foreach($tags as $tag){
$tag = trim($tag);
if($tag == '') continue;
$tcids[] = $tag;
}
$tids = join(',', $tcids);
@me = '';
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM dede_arctype WHERE id IN ($tids) ORDER BY id ASC");
$dsql->Execute('al');
while($row = $dsql->GetArray('al')){
$link = GetTypeUrl($row['typeid'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl'], $row['sitepath']);
@me .= "<a href='{$link}'>{$row['typename']}</a> > ";
}
$last_pos = strrpos(@me, ' > ');
if($last_pos !== false) @me = substr(@me, 0, $last_pos);
{/dede:field}
dede:field name='position': position 字段本身就存储了面包屑的 ID,如 5,12。runphp='yes': 允许在标签内执行 PHP 代码。
position 中的栏目 ID。> 分隔。>。<a href="/plus/list.php?tid=5">产品中心</a> > <a href="/plus/list.php?tid=12">手机</a>
场景3:在首页或任意页面,调用指定的一级栏目及其下的所有二级栏目。
{dede:channel type='son' typeid='5'}
{dede:type}
<li class="main-level">
<a href="[field:typelink/]]" class="main-level-link">[field:typename/]</a>
<ul class="sub-level">
{dede:channel type='son' noself='yes'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{dede:channel}
</ul>
</li>
{/dede:type}
{/dede:channel}
{dede:channel type='son' typeid='5'}:
typeid='5': 指定要调用哪个一级栏目,5 是该一级栏目在数据库中的 ID,你需要替换成你自己的 ID。type='son': 表示调用指定栏目(ID=5)下的所有子栏目(二级栏目)。{dede:type} 和 {dede:channel type='son' noself='yes'}:
{dede:type} 用于获取外层循环到的那个二级栏目的信息。noself='yes': 在内层循环时,不显示当前栏目本身,只显示其下的子栏目(三级栏目),如果二级栏目下没有三级栏目,这个内层循环就不会输出任何东西。
<li class="main-level">
<a href="/plus/list.php?tid=12" class="main-level-link">手机</a>
<ul class="sub-level">
<!-- 假设手机下还有子栏目,这里会列出 -->
</ul>
</li>
<li class="main-level">
<a href="/plus/list.php?tid=13" class="main-level-link">电脑</a>
<ul class="sub-level">
<!-- 假设电脑下还有子栏目,这里会列出 -->
</ul>
</li>
总结与快速参考
需求场景
推荐标签
关键参数
说明
获取当前栏目名(一或二级)
{dede:field name='typename'/}无
最简单,自动判断,在文章页显示“二级>一级”,在栏目页显示“一级”。
获取当前文章的一级栏目名
{dede:channel type='top' typeid=''}type='top'在文章页使用,获取该文章所属的顶级父栏目名称。
获取当前栏目的面包屑导航
{dede:field name='position' runphp='yes'}...runphp='yes'需要写一段 PHP 代码来解析和格式化,功能最强大。
调用指定一级栏目及其所有子栏目
{dede:channel type='son' typeid='X'}typeid='X'type='son'X 是你要调用的一级栏目 ID,常用于制作多级导航菜单。typeid 参数时,你需要登录 DedeCMS 后台,在【栏目管理】中找到对应的栏目,查看其“栏目ID”,然后替换代码中的数字。
