dede父级栏目名称如何获取?

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

使用系统内置的 GetPosition() 函数 (最推荐,最简单)

这是 DedeCMS 提供的最便捷、最标准的方法,它会自动生成类似 “首页 > 父栏目 > 当前栏目” 这样的路径。

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

适用场景:

  • 列表页 (list_article_art.htm 等)
  • 内容页 (article_article.htm 等)
  • 其他需要栏目路径的地方。

代码示例:

在模板文件中,直接使用以下标签即可:

{dede:field name='position'/}

示例效果: 如果你的网站结构是 首页 > 技术分享 > DedeCMS教程,那么在“DedeCMS教程”这个栏目或文章页使用 {dede:field.name='position'/},页面显示的就是: 首页 > 技术分享 > DedeCMS教程

如何只获取父级栏目名称? GetPosition() 返回的是一个完整的路径字符串,如果你只想获取直接父级的栏目名称,需要结合 PHP 的字符串处理函数。

在列表页获取父级栏目名称:

dede 父级栏目名称
(图片来源网络,侵删)
{dede:list}
    <!-- 假设当前栏目的ID是 {dede:field.id/} -->
    <?php
        // 获取当前栏目的顶级栏目ID
        $topid = GetTopid($typeid);
        // 获取当前栏目的父级栏目ID
        $parentid = $fields['reid'];
        // 如果不是顶级栏目,则获取父级栏目名称
        if ($parentid > 0) {
            $row = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = $parentid");
            $parent_name = $row['typename'];
        } else {
            $parent_name = '顶级栏目';
        }
    ?>
    文章标题:{dede:field.title/}
    父级栏目:<?php echo $parent_name; ?>
{/dede:list}

页获取父级栏目名称:** 页的变量可以直接使用 $this->Fields

{dede:field.title/}
<?php
    // 获取当前文章所在栏目的父级栏目ID
    $typeid = $this->Fields['typeid'];
    $parentid = $this->Fields['reid'];
    if ($parentid > 0) {
        $row = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = $parentid");
        $parent_name = $row['typename'];
    } else {
        $parent_name = '顶级栏目';
    }
?>
当前文章的父级栏目是:<?php echo $parent_name; ?>

使用SQL直接查询数据库 (灵活可控)

当你需要更复杂的逻辑,或者不想依赖系统函数时,可以直接执行 SQL 查询。

适用场景:

  • 任何需要获取父级栏目信息的自定义页面。
  • 对查询结果有特殊处理需求时。

代码示例:

前提: 你需要知道当前栏目的 ID (在列表页是 $typeid页是 $this->Fields['typeid'])。

通用代码片段:

<?php
    // 假设你已经获取了当前栏目的ID,$currentTypeId = 5;
    $currentTypeId = $this->Fields['typeid']; // 在内容页中使用
    // $currentTypeId = $typeid; // 在列表页循环中使用
    if (!empty($currentTypeId)) {
        // 查询当前栏目的信息
        $currentType = $dsql->GetOne("SELECT reid, typename FROM `dede_arctype` WHERE id = $currentTypeId");
        // reid 不为0,说明有父级栏目
        if ($currentType['reid'] > 0) {
            // 根据父级栏目ID查询父级栏目名称
            $parentType = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = " . $currentType['reid']);
            $parent_name = $parentType['typename'];
            echo "父级栏目是:" . $parent_name;
        } else {
            echo "这是顶级栏目";
        }
    }
?>

在PHP文件中处理 (适用于非模板文件)

如果你在 include 目录下的一个PHP文件或者一个自定义的PHP页面中需要获取父级栏目名称,方法类似,但需要先初始化DedeCMS环境。

适用场景:

  • 自定义的PHP页面。
  • 后台开发中。

代码示例:

<?php
    require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入DedeCMS核心文件
    // 假设当前栏目ID是 10
    $currentTypeId = 10;
    if (!empty($currentTypeId)) {
        // 使用 $dsql 对象进行查询
        $currentType = $dsql->GetOne("SELECT reid, typename FROM `dede_arctype` WHERE id = $currentTypeId");
        if ($currentType['reid'] > 0) {
            $parentType = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = " . $currentType['reid']);
            echo "栏目ID为 $currentTypeId 的父级栏目是:" . $parentType['typename'];
        } else {
            echo "栏目ID为 $currentTypeId 是顶级栏目。";
        }
    }
?>

总结与建议

场景 推荐方法 优点 缺点
列表页/内容页显示完整路径 {dede:field.name='position'/} 极其简单,官方标准,支持链接 无法直接获取单个父级名称
列表页/内容页获取单个父级名称 方法一 + PHP处理 结合了系统函数和灵活性 需要少量PHP代码
复杂查询或自定义页面 直接SQL查询 灵活,完全可控 需要手写SQL,代码稍多
PHP文件中处理 初始化环境后查询 可在任何PHP脚本中使用 需要引入核心文件,不适合模板

对于绝大多数模板修改需求,强烈推荐使用方法一,因为它最安全、最符合DedeCMS的设计,如果只需要父级名称,再结合PHP进行简单的字符串处理或二次查询即可。

-- 展开阅读全文 --
头像
C语言如何高效输出1-100的偶数?
« 上一篇 今天
C语言飞机订票系统如何实现核心功能?
下一篇 » 今天

相关文章

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

目录[+]