在 DedeCMS(织梦CMS)中,获取当前栏目的上级栏目信息是一个常见的需求,我们使用 {dede:type} 标签配合一些自定义属性或PHP代码来实现。

(图片来源网络,侵删)
这里为您提供几种最常用和最有效的方法,从简单到复杂,您可以根据自己的需求选择。
使用 {dede:type} 标签(推荐,最常用)
这是最标准、最推荐的方法。{dede:type} 标签可以在列表页或内容页中,获取指定ID的栏目信息。
场景1:在列表页或内容页获取当前栏目的上级栏目
假设你在一个栏目的列表页(list_article.htm)或文章内容页(article_article.htm),你想获取这个栏目(当前栏目)的上级栏目信息。
代码示例:

(图片来源网络,侵删)
{dede:type}
<a href="[field:typelink/]">[field:typename/]</a>
<!-- 这里的 [field:typename/] 和 [field:typelink/] 指的是上级栏目的信息 -->
{/dede:type}
代码解释:
{dede:type}: 这个标签默认会获取当前栏目的父栏目(即上级栏目)的信息。[field:typelink/]: 输出上级栏目的链接地址。[field:typename/]: 输出上级栏目的名称。
示例:
如果你的网站结构是 首页 -> 技术分享 -> PHP教程。
当你访问 PHP教程 这个栏目的列表页时,上面的代码会输出:技术分享,并指向 技术分享 的链接。
场景2:在任意位置获取指定ID的上级栏目
如果你想在模板的任意位置,通过指定一个栏目的ID来获取它的上级栏目,可以使用 typeid 属性。
代码示例:
{dede:type typeid='2'}
<h2>上级栏目名称:[field:typename/]</h2>
<p>上级栏目链接:<a href="[field:typelink/]">点击进入</a></p>
{/dede:type}
代码解释:
typeid='2': 指定了你想要查询的栏目的ID是2。{dede:type}会找到ID为2的栏目的父级信息。- 其他用法和场景1完全一样。
使用PHP代码(更灵活,适用于复杂逻辑)
{dede:type} 标签无法满足你的需求(在循环中需要动态获取上级栏目),你可以在模板文件中直接嵌入PHP代码。
场景:在列表页(list_article.htm)中获取当前栏目的上级栏目
代码示例:
<?php
// 1. 获取当前栏目的ID
$typeid = $this->TypeID;
// 2. 获取当前栏目的完整信息,包括父ID
$typeInfo = GetOneType($typeid);
// 3. 从当前栏目信息中获取父级栏目ID
$topid = $typeInfo['topid']; // 注意:这里用的是topid,而不是reid
// reid 是直接上级的ID,topid 是最顶级栏目的ID。
// 如果要获取直接上级,应该用 $reid = $typeInfo['reid'];
// 4. 根据父级ID获取父级栏目的详细信息
if ($reid > 0) { // 确保存在上级栏目
$parentType = GetOneType($reid);
// 5. 输出上级栏目的信息
echo "<a href='/plus/list.php?tid=" . $parentType['id'] . "'>" . $parentType['typename'] . "</a>";
}
?>
代码解释:
$this->TypeID: 在列表页模板中,这个变量包含了当前栏目的ID。GetOneType($id): 这是DedeCMS的一个核心函数,用于获取指定ID的栏目的完整信息数组。$typeInfo['reid']: 返回的栏目信息数组中,reid字段代表“上级栏目ID”(Parent ID)。$typeInfo['topid']: 返回的栏目信息数组中,topid字段代表“顶级栏目ID”(Top-level ID),如果你想获取的是最顶级的栏目,应该用这个。GetOneType($reid): 再次调用这个函数,获取到上级栏目的完整信息。- 通过
$parentType数组中的id和typename等键来获取你需要的信息。
获取顶级栏目
有时候你可能不想要直接上级,而是想要这个栏目所属的顶级栏目(比如面包屑导航),这时,使用PHP代码会更直接。
代码示例:
<?php
$typeid = $this->TypeID;
$typeInfo = GetOneType($typeid);
$topid = $typeInfo['topid']; // 直接获取顶级栏目ID
if ($topid > 0) {
$topType = GetOneType($topid);
echo "顶级栏目:<a href='/plus/list.php?tid=" . $topType['id'] . "'>" . $topType['typename'] . "</a>";
}
?>
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:type} |
简单、高效、符合模板规范、代码简洁。 | 灵活性相对较低,只能在 {dede:type} 标签内部使用其字段。 |
绝大多数情况,尤其是在列表页、内容页获取直接上级或顶级栏目。 |
| PHP代码 | 灵活性极高、可以结合PHP进行复杂判断和循环、可获取任意层级的父级。 | 代码量稍多,需要了解一些PHP和DedeCMS函数。 | 需要在循环中动态获取上级信息,或者需要构建复杂逻辑(如面包屑导航)时。 |
推荐实践:
- 如果只是简单地显示上级栏目名称和链接,优先使用方法一 (
{dede:type})。 - 如果需要构建面包屑导航,或者有更复杂的需求,使用方法二 (PHP代码) 会更强大。
希望这些方法能帮助你解决问题!
