页如何调用顶级栏目名称?

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

使用 GetTopTypename() 函数(最推荐,最简洁)

这是DedeCMS官方提供的专门用于获取顶级栏目名称的函数,也是最简单、最稳定的方法,它直接返回顶级栏目的名称字符串。

dede 内容页调用顶级栏目名称
(图片来源网络,侵删)

适用场景:绝大多数情况下,直接获取名称字符串即可。

代码示例: 页模板文件(通常是 article_article.htm)中,在需要显示顶级栏目名称的地方,加入以下代码:

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

代码解析

  • {dede:field.typeid}:这是获取当前文章所属的栏目ID。typeid 是一个字段,存储的就是栏目ID。
  • function="GetTopTypename(@me)":这是一个函数调用。
    • @me:代表 {dede:field.typeid} 当前获取到的值(也就是栏目ID)。
    • GetTopTypename():这是DedeCMS的核心函数,它会接收一个栏目ID作为参数,然后查询数据库,返回该ID对应的顶级栏目的名称。

使用SQL直接查询(更灵活,可获取更多信息)

如果你不仅需要顶级栏目的名称,还需要它的链接(URL)、ID等其他信息,使用SQL查询会更灵活。

dede 内容页调用顶级栏目名称
(图片来源网络,侵删)

适用场景:需要获取顶级栏目的多个属性,如名称、链接、ID等。

代码示例: 页模板中,使用 {dede:sql} 标签进行数据库查询。

{dede:sql sql="SELECT typename,typedir FROM dede_arctype WHERE id=(SELECT topid FROM dede_arctype WHERE id=~typeid~)"}
    <a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a>
{/dede:sql}

代码解析

  1. 内层查询 SELECT topid FROM dede_arctype WHERE id=~typeid~:

    dede 内容页调用顶级栏目名称
    (图片来源网络,侵删)
    • ~typeid~:这是DedeCMS模板中的一个特殊全局变量,等同于当前文章的栏目ID,比 @me 更直接。
    • 这句查询的目的是:根据当前文章的栏目ID,找到它直接父栏目的ID(topid 字段)。
  2. 外层查询 SELECT typename,typedir FROM dede_arctype WHERE id=(...)):

    • 将内层查询得到的结果(即父栏目的ID)作为 WHERE 条件。
    • topid 字段存储的就是顶级栏目的ID,所以这句查询最终会获取到顶级栏目的名称(typename)和目录(typedir)。
  3. 输出部分:

    • [field:typedir ...]:获取顶级栏目的目录路径。
    • function='str_replace("{cmspath}","",@me)':这是一个非常重要的处理。typedir 字段里通常包含 {cmspath} 这个占位符(代表你的网站根目录),需要将它替换掉,才能得到正确的URL。
    • [field:typename/]:获取顶级栏目的名称。

通过JavaScript调用(适用于特定布局)

你可能希望在页面加载后,通过JavaScript来动态设置顶级栏目名称,例如在某个特定的<div><span>中。

适用场景:需要将栏目名称动态插入到非标准模板位置,或者与前端JS框架联动。

代码示例

在模板的 <head> 部分或底部,加入以下JS代码:

<script>
    // 获取当前文章的顶级栏目名称
    function getTopTypeName() {
        // 调用DedeCMS的全局函数,需要确保页面已加载DedeCMS的核心JS(通常不需要)
        // 这里我们通过AJAX请求一个专门的处理页面来获取,或者直接在模板里输出一个JS变量
        // 方式一:直接在模板里定义一个JS变量(推荐)
        // 在模板的PHP部分(需要修改PHP文件或在模板里用PHP标签)获取名称并赋值给JS变量
        // 在模板里可以这样(需要开启PHP支持):
        // <script>
        //     var topTypeName = "<?php echo GetTopTypename($typeid); ?>";
        //     document.getElementById('top-cat-name').innerText = topTypeName;
        // </script>
        // 方式二:如果模板支持直接调用(较新的版本或开启相应支持)
        // var topTypeName = "{dede:field.typeid function='GetTopTypename(@me)'}";
        // document.getElementById('top-cat-name').innerText = topTypeName;
    }
    // 页面加载完成后执行
    window.onload = function() {
        // 假设你有一个id为"top-cat-name"的元素
        var nameElement = document.getElementById('top-cat-name');
        if (nameElement) {
            // 调用DedeCMS的全局函数(如果可用)
            // 注意:这个全局函数名可能因版本而异,不一定可靠
            // var topName = GetTopTypename(document.getElementById('typeid').value);
            // 更可靠的方式是方法一的PHP输出
            nameElement.innerText = "顶级栏目名称"; // 这里需要替换为实际获取逻辑
        }
    };
</script>
<!-- 在模板的某个位置放置一个元素用于显示 -->
<span id="top-cat-name"></span>

注意:方法三相对复杂,依赖于PHP在模板中的执行或JS环境,不如前两种方法稳定和常用,通常只在有特殊前端交互需求时才考虑。


总结与对比

方法 优点 缺点 推荐度
GetTopTypename() 代码最简洁、最稳定、性能最好,是官方推荐用法。 只能获取名称,无法直接获取链接等其他信息。 ★★★★★ (首选)
SQL查询 非常灵活,可以一次性获取顶级栏目的名称、链接、ID等所有信息。 代码稍长,需要理解SQL语句,对不熟悉SQL的用户有一定门槛。 ★★★★☆ (需要链接时)
JavaScript 灵活性高,适合复杂的前端动态交互。 依赖JS环境,实现复杂,稳定性不如前两种,需要额外处理。 ★★☆☆☆ (特定场景)

最终建议

  • 如果只是显示顶级栏目的名称,请毫不犹豫地使用 方法一 {dede:field.typeid function="GetTopTypename(@me)" /}
  • 如果除了名称,还需要生成一个指向顶级栏目的链接,请使用 方法二 的SQL查询方法,它能同时获取 typenametypedir,非常方便。
-- 展开阅读全文 --
头像
织梦栏目如何调用seotitle?
« 上一篇 2025-12-22
dede 安装模块 无法找到该页
下一篇 » 2025-12-22

相关文章

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

目录[+]