使用顶级栏目(最常用)
这是最简单、最直接的方法,很多时候,用户需要的“上级栏目”实际上就是指“顶级栏目”,织梦的标签 {dede:field.typeid function='GetTopTypename(@me)'/} 可以完美实现这一点。

(图片来源网络,侵删)
适用场景:当您在任何子栏目或文章页面,想显示该栏目所属的顶级栏目名称时。
代码示例:
{dede:field.typeid function='GetTopTypename(@me)'/}
代码解析:
{dede:field.typeid}:获取当前栏目或文章的栏目ID。function='GetTopTypename(@me)':这是一个自定义函数调用。@me:代表{dede:field.typeid}的值,也就是当前栏目的ID。GetTopTypename():这是织梦系统自带的一个函数,它的作用就是根据传入的栏目ID,向上查找并返回其顶级栏目的名称。
获取直接上级栏目名称
如果您需要获取的是直接父级栏目的名称,而不是顶级栏目,那么需要使用自定义函数,因为织梦默认没有提供这样的标签。

(图片来源网络,侵删)
适用场景:在子栏目列表页或内容页,显示其直接上级栏目的名称。
第一步:在 /include/common.func.php 文件中添加自定义函数
这是最关键的一步,请通过FTP或文件管理器,打开您的网站根目录下的 /include/common.func.php 文件,在文件的末尾,?> 标签之前,添加以下PHP代码:
/**
* 获取指定栏目的直接上级栏目名称
* @param int $typeid 栏目ID
* @return string 上级栏目名称
*/
function GetParentTypename($typeid)
{
global $dsql;
if (empty($typeid)) {
return '';
}
// 获取当前栏目的信息
$query = "SELECT reid, typename, topid FROM `#@__arctype` WHERE id = $typeid";
$row = $dsql->GetOne($query);
// 如果reid为0,说明它本身就是顶级栏目,没有上级
if ($row['reid'] == 0) {
return '';
}
// 获取上级栏目的名称
$parent_query = "SELECT typename FROM `#@__arctype` WHERE id = " . $row['reid'];
$parent_row = $dsql->GetOne($parent_query);
return $parent_row['typename'];
}
重要提示:
- 在修改网站核心文件前,请务必备份原文件,以防出错。
- 如果您的文件已经修改过,请确保不要重复添加这段函数。
第二步:在模板文件中调用该函数
添加完函数后,您就可以在任意模板文件中使用它了。

(图片来源网络,侵删)
代码示例:
{dede:field.typeid function='GetParentTypename(@me)'/}
代码解析:
{dede:field.typeid}:获取当前栏目的ID。function='GetParentTypename(@me)':调用我们刚刚在common.func.php中定义的GetParentTypename函数,并将当前栏目ID作为参数传入。
通过SQL查询直接获取(适用于列表页)
如果您在栏目列表页(list_article.htm),并且需要调用上级栏目名称,可以直接在织梦的列表循环标签内嵌套SQL查询。
适用场景:在子栏目的列表页,显示“您当前所在的位置:[上级栏目名称] > [当前栏目名称]”。
代码示例:
{dede:channelartlist typeid=''}
<h2>{dede:field name='typename'/}</h2>
<ul>
{dede:list pagesize='10'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:list}
</ul>
{/dede:channelartlist}
解析:
这种方法的核心是使用 {dede:channelartlist} 标签,这个标签会自动循环其指定的顶级栏目及其下的所有子栏目。
{dede:field name='typename'/}在这个循环中,获取的是当前层级的栏目名称。typeid指定了顶级栏目A,那么它显示的就是A。- 如果循环到了A的子栏目B,那么它显示的就是B。
- 它不需要额外的函数就能清晰地展示出栏目层级关系,如果您想在列表页面包屑中显示上级名称,可以结合
{dede:position}标签使用。
综合示例:制作面包屑导航
面包屑导航是调用上级栏目名称最典型的应用,下面是一个结合了多种方法的示例。
模板代码 (article_article.htm 或 list_article.htm)
<div class="breadcrumb">
您的位置:
<!-- 使用 {dede:position} 标签,这是最标准的织梦面包屑方法 -->
{dede:position style=' > '/}
<!-- {dede:position} 不满足需求,可以手动构建 -->
<!--
<a href="/">首页</a>
>
{dede:field.typeid function='GetTopTypename(@me)'/}
>
{dede:field typename/}
-->
</div>
代码解析:
-
{dede:position style=' > '/}- 这是织梦官方提供的、最推荐的面包屑生成方法。
- 它会自动根据当前页面(文章页或栏目页)的层级,生成类似 “首页 > 技术文章 > 织梦教程” 这样的链接。
style=' > '参数用于定义层级之间的分隔符。
-
手动构建的注释代码
首页 > {dede:field.typeid function='GetTopTypename(@me)'/} > {dede:field typename/}- 这个示例展示了如何手动组合面包屑。
{dede:field.typeid function='GetTopTypename(@me)'/}调用顶级栏目名称。{dede:field typename/}调用当前栏目或文章的所属栏目名称。- 这种方法更灵活,但通常
{dede:position}已经足够。
| 需求场景 | 推荐方法 | 代码示例 |
|---|---|---|
| 获取顶级栏目名称 | 方法一(系统自带函数) | {dede:field.typeid function='GetTopTypename(@me)'/} |
| 获取直接父级栏目名称 | 方法二(自定义函数) | 在common.func.php添加GetParentTypename函数。在模板调用: {dede:field.typeid function='GetParentTypename(@me)'/} |
| 生成面包屑导航 | 方法三(官方标签) | {dede:position style=' > '/} |
| 在栏目列表页显示层级 | 方法四(channelartlist |
使用 {dede:channelartlist} 循环,{dede:field name='typename'/} 会自动获取当前层级名称。 |
对于绝大多数情况,方法一和方法三已经可以解决90%以上的问题,方法二则提供了更精确的控制,希望这些详细的解释和示例能帮助您解决问题!
