dede如何获取当前父栏目名称?

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

使用顶级栏目名称(最推荐)

在DedeCMS的栏目列表页(list_栏目ID.htm)或文章内容页(article_文章ID.htm),系统会自动生成一个名为 topid 的变量,它存储了当前栏目的顶级栏目ID,利用这个ID,我们可以非常方便地获取顶级栏目的所有信息,包括名称。

dede获取父栏目名称
(图片来源网络,侵删)

适用场景

  • 在栏目列表页 (list_x.htm)
  • 页 (article_x.htm)

代码示例

在您的模板文件(如 list_article.htmarticle_article.htm)中,加入以下代码:

{dede:field name='typeid' function="GetTopTypename(@me)"/}

代码解释

dede获取父栏目名称
(图片来源网络,侵删)
  • {dede:field name='typeid'}: 获取当前栏目的ID。
  • function="GetTopTypename(@me)": 这是一个自定义函数调用。
    • @me: 代表 typeid 的值,即当前栏目ID。
    • GetTopTypename: 这是DedeCMS内置的一个函数,它的作用就是根据一个栏目ID,获取其顶级栏目的名称。

这个方法最简洁、最高效,是官方推荐的做法。


使用SQL直接查询(最灵活)

如果您需要获取的不仅仅是父栏目名称,还有其他信息(如链接、描述等),或者您需要获取的是直接父级而不是顶级栏目,那么直接执行SQL查询是最灵活的方法。

适用场景

  • 需要获取直接父级栏目。
  • 需要获取父栏目的多个字段(如名称、链接、ID等)。
  • 在非标准页面(如首页、自定义页面)中获取。

代码示例

dede获取父栏目名称
(图片来源网络,侵删)

以下代码以获取直接父级栏目为例。

{dede:sql sql="SELECT typename,typedir FROM `dede_arctype` WHERE id = ~typeid~"}
    <a href="[field:typedir/]/">[field:typename/]</a>
{/dede:sql}

代码解释

  • {dede:sql ...}: DedeCMS的SQL标签,用于执行自定义SQL语句。
  • SELECT typename,typedir FROM dede_arctype WHERE id = ~typeid~:
    • SELECT typename,typedir: 我们想从 dede_arctype 表(栏目表)中查询栏目的名称(typename)和目录(typedir)。
    • WHERE id = ~typeid~: 查询条件是ID等于当前栏目的ID,这里的 ~typeid~ 是DedeCMS的模板标签,在解析时会被替换为实际的栏目ID。
  • [field:typename/][field:typedir/]: 循环输出查询结果中的字段。

如何获取顶级栏目?

如果要用SQL获取顶级栏目,逻辑会稍微复杂一些,需要先找到顶级ID,再查询,在这种情况下,方法一仍然是更优的选择。


通过获取当前栏目信息再递归(适用于PHP文件)

这种方法通常用在PHP模板文件(.php)中,而不是纯粹的HTML模板文件(.htm)中,它通过获取当前栏目的完整信息,然后手动查找其父级。

适用场景

  • 在自定义的PHP页面中。
  • 需要进行更复杂的栏目层级逻辑判断。

代码示例

假设您在一个PHP模板文件中:

<?php
// 引入DedeCMS common.inc.php 文件,确保获取了全局变量
// require_once(dirname(__FILE__) . "/include/common.inc.php");
// 获取当前栏目ID
$typeid = $GLOBALS['typeid'];
// 如果typeid存在
if($typeid > 0) {
    // 获取当前栏目的所有信息
    $typeInfo = GetOneType($typeid);
    // 如果存在父级ID(不为0)
    if($typeInfo['reid'] > 0) {
        // 获取父级栏目的所有信息
        $parentInfo = GetOneType($typeInfo['reid']);
        // 现在你可以使用 $parentInfo 中的任何信息
        $parentName = $parentInfo['typename'];
        $parentLink = $parentInfo['typedir'];
        echo "父栏目名称是:" . $parentName;
        echo "<a href='".$parentLink."'>返回父栏目</a>";
    } else {
        echo "当前栏目是顶级栏目,没有父栏目。";
    }
}
?>

代码解释

  • GetOneType($typeid): DedeCMS的核心函数,根据栏目ID获取该栏目的所有信息,并返回一个关联数组。
  • $typeInfo['reid']: reid 字段存储了当前栏目的直接父级栏目IDreid 为 0,则表示它是顶级栏目。
  • GetOneType($typeInfo['reid']): 通过父级ID再次调用函数,获取父级栏目的详细信息。

总结与推荐

方法 优点 缺点 推荐场景
GetTopTypename() 代码最简洁、执行效率最高、官方支持 只能获取顶级栏目名称 99%的情况下都推荐使用,尤其是在列表页和内容页。
{dede:sql} 非常灵活,可获取任意父级、多个字段 代码稍长,直接操作数据库有轻微性能开销 需要获取直接父级、或父级多个信息时。
PHP代码 逻辑最强大,可进行复杂判断 只能在PHP文件中使用,不适合纯HTML模板 在自定义PHP页面开发中。

对于绝大多数模板修改需求,强烈推荐使用方法一,它既简单又高效。

-- 展开阅读全文 --
头像
织梦站更新文字后内容不显示怎么办?
« 上一篇 03-14
全国计算机二级C语言教材该怎么选?
下一篇 » 03-14
取消
微信二维码
支付宝二维码

目录[+]