dede如何调用当前顶级栏目链接?

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

使用 {dede:field} 标签和 typeid 属性(推荐)

这是最直接、最简单的方法,适用于大多数情况,它通过获取当前栏目的ID,然后找到其顶级栏目的ID,并调用该顶级栏目的链接。

dede调用当前顶级栏目链接
(图片来源网络,侵删)

代码示例:

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

代码解析:

  1. {dede:field name='typeid'}: 获取当前栏目的ID。
  2. function='GetTopid(@me)': 这是一个PHP函数调用。
    • @me: 代表 {dede:field name='typeid'} 的值,也就是当前栏目的ID。
    • GetTopid(): 这是 DedeCMS 内置的一个函数,它的作用是根据一个子栏目ID,返回其顶级栏目的ID。
  3. {dede:field name='typename'/}: 获取当前栏目的名称,你也可以把它换成顶级栏目的名称,见下面的“进阶用法”。

进阶用法:获取顶级栏目的名称

如果你想在链接里显示顶级栏目的名称而不是当前栏目名称,可以嵌套使用 {dede:arclist} 标签来查询顶级栏目的信息。

dede调用当前顶级栏目链接
(图片来源网络,侵删)
<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">
    {dede:arclist row='1' typeid='[field:typeid function="GetTopid(@me)"/]'}
        [field:typename/]
    {/dede:arclist}
</a>

代码解析:

  • [field:typeid function="GetTopid(@me)"/]: 在 arclist 标签内部,使用 [field:xxx] 语法来调用函数,获取顶级栏目ID。
  • row='1': 只获取一条记录,因为我们只需要一个顶级栏目的信息。
  • [field:typename/]: 获取这个顶级栏目的名称。

使用 {dede:channel} 标签(适用于导航栏)

如果你的顶级栏目是固定的,并且你想在模板中直接调用它们,可以在当前栏目页使用 typeid 属性来指定顶级栏目ID,然后循环输出。

代码示例:

假设你知道顶级栏目的ID是 1, 2, 3,你可以这样写:

dede调用当前顶级栏目链接
(图片来源网络,侵删)
{dede:channel type='top' typeid='1,2,3'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码解析:

  • type='top': 这个属性表示只调用顶级栏目。
  • typeid='1,2,3': 指定要调用的顶级栏目ID列表,如果你不确定ID,或者想动态获取,这个方法就不太方便了。方法一通常更灵活

使用自定义函数(最灵活)

如果你有PHP编程基础,或者需要更复杂的逻辑,可以创建一个自定义函数。

步骤:

  1. 创建自定义函数文件/include/extend.func.php 文件中(如果这个文件不存在,就自己创建一个)添加以下PHP函数:

    /**
     * 获取当前栏目的顶级栏目链接
     * @param int $typeid 当前栏目ID
     * @return string 顶级栏目的链接
     */
    function GetTopLink($typeid)
    {
        if (empty($typeid)) {
            return '';
        }
        // 引入全局数据库对象
        global $dsql;
        // 查询顶级栏目信息
        // `topid` 是顶级栏目ID,`reid` 是父级栏目ID,顶级栏目的 `reid` 为 0
        $query = "SELECT id, typedir FROM `dede_arctype` WHERE id = (SELECT topid FROM `dede_arctype` WHERE id = $typeid)";
        $row = $dsql->GetOne($query);
        if ($row) {
            // 返回完整的栏目链接
            return $row['typedir'];
        }
        return '';
    }
  2. 在模板中调用 在你的模板文件(如 article_article.htm)中使用这个自定义函数:

    <a href="{dede:field name='typeid' function='GetTopLink(@me)'/}">返回顶级栏目</a>

代码解析:

  • 这个函数 GetTopLink() 直接通过SQL查询,根据当前栏目ID找到其顶级栏目的 typedir(栏目目录,即链接)。
  • function='GetTopLink(@me)' 将当前栏目ID (@me) 作为参数传递给这个函数。

总结与推荐

方法 优点 缺点 推荐场景
方法一 ({dede:field} + GetTopid) 代码简洁、调用方便、性能好,无需额外文件。 稍微嵌套时语法会复杂一点。 绝大多数情况下的首选,尤其适用于文章页、列表页调用当前顶级栏目。
方法二 ({dede:channel}) 语法直观,适合循环输出多个顶级栏目。 不够灵活,需要手动指定顶级栏目ID。 制作固定的主导航栏,且顶级栏目不会变动时。
方法三 (自定义函数) 灵活性最高,可以实现任何复杂逻辑,可重用性强。 需要修改PHP文件,对新手不友好。 当需要获取顶级栏目的其他信息(如特定字段),或逻辑非常复杂时。

对于绝大多数用户来说,强烈推荐使用方法一,因为它最简单、最通用,且是 DedeCMS 设计的“标准”用法。

-- 展开阅读全文 --
头像
织梦如何调用自定义附件
« 上一篇 01-14
函数返回值类型由什么决定?
下一篇 » 01-14
取消
微信二维码
支付宝二维码

目录[+]