dede 获取上级栏目

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 DEDE建站 正文

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

dede 获取上级栏目
(图片来源网络,侵删)

这里为您提供几种最常用和最有效的方法,从简单到复杂,您可以根据自己的需求选择。


使用 {dede:type} 标签(推荐,最常用)

这是最标准、最推荐的方法。{dede:type} 标签可以在列表页或内容页中,获取指定ID的栏目信息。

场景1:在列表页或内容页获取当前栏目的上级栏目

假设你在一个栏目的列表页(list_article.htm)或文章内容页(article_article.htm),你想获取这个栏目(当前栏目)的上级栏目信息。

代码示例:

dede 获取上级栏目
(图片来源网络,侵删)
{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>";
    }
?>

代码解释:

  1. $this->TypeID: 在列表页模板中,这个变量包含了当前栏目的ID。
  2. GetOneType($id): 这是DedeCMS的一个核心函数,用于获取指定ID的栏目的完整信息数组。
  3. $typeInfo['reid']: 返回的栏目信息数组中,reid 字段代表“上级栏目ID”(Parent ID)。
  4. $typeInfo['topid']: 返回的栏目信息数组中,topid 字段代表“顶级栏目ID”(Top-level ID),如果你想获取的是最顶级的栏目,应该用这个。
  5. GetOneType($reid): 再次调用这个函数,获取到上级栏目的完整信息。
  6. 通过 $parentType 数组中的 idtypename 等键来获取你需要的信息。

获取顶级栏目

有时候你可能不想要直接上级,而是想要这个栏目所属的顶级栏目(比如面包屑导航),这时,使用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代码) 会更强大。

希望这些方法能帮助你解决问题!

-- 展开阅读全文 --
头像
图书信息管理系统c语言设计
« 上一篇 03-18
织梦联动类别前端如何调用?
下一篇 » 03-18

相关文章

取消
微信二维码
支付宝二维码

目录[+]