织梦cms父栏目名称链接如何调用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

这里为您提供几种最常用和最可靠的方法,从简单到复杂,并附上详细说明。

织梦cms 父栏目调用名称和链接
(图片来源网络,侵删)

核心原理

织梦CMS的栏目数据存储在 #@_arctype 数据表中,要获取父栏目信息,我们需要通过当前栏目的 topid (顶级栏目ID)、reid (父栏目ID) 或 typename (栏目名称) 等字段来查询。


在列表页(栏目页)调用父栏目信息

这是最常见的情况,你希望在 list_article_*.php 页面显示当前栏目的父栏目名称和链接。

步骤 1:修改列表页模板文件

打开你当前栏目使用的列表页模板文件,路径通常是 /templets/default/list_article_*.php ( 是数字)。

步骤 2:在模板中添加调用代码

在需要显示父栏目信息的位置,加入以下代码。

织梦cms 父栏目调用名称和链接
(图片来源网络,侵删)

代码示例:

{dede:field name='typename' function='GetParentTop(@me,1)'/}

或者,如果你想同时获取父栏目的名称和链接,可以这样写:

<a href="{dede:field name='typeid' function='GetParentTopUrl(@me,1)'/}">{dede:field name='typename' function='GetParentTop(@me,1)'/}</a>

代码详解

这里我们使用了两个自定义函数:GetParentTopGetParentTopUrl,这两个函数默认不存在于织梦系统中,你需要将其添加到系统函数库中才能使用。

步骤 3:添加自定义函数到系统

  1. 打开织梦CMS的核心文件 /include/common.func.php
  2. 在文件末尾的 ?> 之前,添加以下两段代码:

获取父栏目的名称

织梦cms 父栏目调用名称和链接
(图片来源网络,侵删)
/**
 * 获取指定栏目的父栏目名称
 * @param int $typeid 当前栏目ID
 * @param int $step 向上查找的级数,1为直接父栏目,2为父父栏目,以此类推
 * @return string 父栏目名称
 */
function GetParentTop($typeid, $step = 1) {
    global $dsql;
    $row = $dsql->GetOne("SELECT * FROM `#@_arctype` WHERE `id` = $typeid");
    if ($row['reid'] == 0) {
        return $row['typename']; // 如果是顶级栏目,则返回自身名称
    }
    $reid = $row['reid'];
    for ($i = 0; $i < $step; $i++) {
        $parentRow = $dsql->GetOne("SELECT * FROM `#@_arctype` WHERE `id` = $reid");
        if ($parentRow['reid'] == 0) {
            return $parentRow['typename'];
        }
        $reid = $parentRow['reid'];
    }
    return '';
}

获取父栏目的链接

/**
 * 获取指定栏目的父栏目链接
 * @param int $typeid 当前栏目ID
 * @param int $step 向上查找的级数,1为直接父栏目,2为父父栏目,以此类推
 * @return string 父栏目链接
 */
function GetParentTopUrl($typeid, $step = 1) {
    global $dsql;
    $row = $dsql->GetOne("SELECT * FROM `#@_arctype` WHERE `id` = $typeid");
    if ($row['reid'] == 0) {
        return GetOneTypeUrlA($row); // 如果是顶级栏目,则返回自身链接
    }
    $reid = $row['reid'];
    for ($i = 0; $i < $step; $i++) {
        $parentRow = $dsql->GetOne("SELECT * FROM `#@_arctype` WHERE `id` = $reid");
        if ($parentRow['reid'] == 0) {
            return GetOneTypeUrlA($parentRow);
        }
        $reid = $parentRow['reid'];
    }
    return '';
}
  1. 保存并关闭 /include/common.func.php 文件。

如何使用:

  • {dede:field name='typeid'}:获取当前栏目的ID。
  • function='GetParentTop(@me,1)':调用 GetParentTop 函数,将当前栏目ID (@me) 作为第一个参数传入,1 表示获取其直接父栏目。
  • function='GetParentTopUrl(@me,1)':同理,获取直接父栏目的链接。

页(文章页)调用父栏目信息

页 (article_*.php) 调用父栏目信息,原理和列表页完全一样,只是获取当前栏目ID的方式不同。

步骤 1:修改内容页模板文件

打开 /templets/default/article_*.php 文件。

步骤 2:在模板中添加调用代码

和方法一中的代码完全相同。

<a href="{dede:field name='typeid' function='GetParentTopUrl(@me,1)'/}">{dede:field name='typename' function='GetParentTop(@me,1)'/}</a>

区别说明:

在列表页,{dede:field name='typeid'} 获取的是当前列表页面对应的栏目ID,页,{dede:field name='typeid'} 获取的是这篇文章所属的栏目ID。

由于我们在步骤3中已经添加了必要的函数,所以这里可以直接复用。


使用原生SQL标签(不推荐修改核心文件)

如果你不想修改 /include/common.func.php 文件,可以使用织梦的 dede:sql 标签直接查询数据库,但这种方法稍显复杂,且灵活性较差。

示例代码(在列表页或内容页使用):

{dede:sql sql="SELECT typename FROM `#@_arctype` WHERE id = (SELECT reid FROM `#@_arctype` WHERE id = ~typeid~)"}
    <a href="[field:phpurl/]/list.php?tid=[field:id/]">[field:typename/]</a>
{/dede:sql}

代码说明:

  1. ~typeid~:这是织梦SQL标签中的一个特殊占位符,会自动被替换为当前栏目的ID。
  2. 内层的 SELECT reid FROM ... 先找到当前栏目的父栏目ID (reid)。
  3. 外层的 SELECT typename FROM ... 再根据这个父栏目ID找到它的名称。
  4. [field:phpurl/]:获取网站根目录地址。
  5. [field:id/]:获取查询结果中父栏目的ID。
  6. [field:typename/]:获取查询结果中父栏目的名称。

缺点:

  • 代码冗长,不易读。
  • 如果父栏目不存在,可能会产生错误。
  • 需要手动拼接链接,不如方法一的函数灵活。

总结与推荐

方法 优点 缺点 推荐场景
方法一(添加自定义函数) 代码简洁、可复用、灵活 需要修改核心文件 common.func.php 强烈推荐,适用于列表页和内容页,是织梦二次开发的最佳实践。
方法二(原生SQL标签) 不需要修改核心文件 代码冗长、灵活性差、可读性低 不推荐,仅在无法修改核心文件的特殊情况下考虑。

最终建议:

直接使用 方法一,虽然需要修改一个核心文件,但这是最规范、最稳定、最易于维护的解决方案,修改 common.func.php 是织梦二次开发中非常常见的操作,只要操作前备份一下原文件,就非常安全。

修改完成后,记得在后台 “生成” -> “更新HTML”,或者清空一下缓存,让新函数生效。

-- 展开阅读全文 --
头像
dede arclist如何调指定栏目id?
« 上一篇 2025-12-11
dede global.cfg dh文件配置与作用是什么?
下一篇 » 2025-12-11

相关文章

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

目录[+]