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

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

使用 GetTopTypename() 函数 (最推荐)

这是DedeCMS官方提供的、最标准、最简洁的方法,它的作用就是获取当前内容所属栏目的顶级栏目名称。

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

适用场景: 所有DedeCMS版本,包括GBK和UTF-8编码。

代码示例:

将以下代码直接放在您的内容页模板(通常是 article_article.htm)的任何需要显示顶级栏目名称的位置即可。

{dede:field name='typename'/}  <!-- 这是调用当前栏目名称 -->
顶级栏目名称是:{dede:field name='typeid' function='GetTopTypename(@me)'/}

代码解析:

dede内容页调用顶级栏目名称
(图片来源网络,侵删)
  • {dede:field name='typeid'}: 获取当前内容所属栏目的 ID
  • function='GetTopTypename(@me)': 这是核心部分。
    • @me:代表前面 {dede:field} 标签获取到的值,也就是当前栏目的ID。
    • GetTopTypename():这是一个DedeCMS内置的PHP函数,它接收一个栏目ID作为参数,并返回该ID对应的顶级栏目的名称。
    • 整个过程就是:获取当前栏目ID -> 将ID传递给GetTopTypename函数 -> 函数返回顶级栏目名称 -> 显示在页面上

使用SQL查询 (灵活但稍复杂)

GetTopTypename() 函数在某些特殊情况下无法满足需求(你想获取顶级栏目的其他信息,如链接、简介等),或者你想自定义逻辑,那么可以直接使用SQL查询。

适用场景: 需要获取顶级栏目更多信息,或对 GetTopTypename() 的结果进行二次处理。

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

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

代码解析:

dede内容页调用顶级栏目名称
(图片来源网络,侵删)
  1. 内层查询: SELECT topid FROM dede_arctype WHERE id=~typeid~

    • ~typeid~:这是DedeCMS模板中的特殊变量,等同于 {dede:field.name='typeid'/},表示当前栏目的ID。
    • 这个查询的作用是:根据当前栏目的ID,去 dede_arctype (栏目表) 中找到它的 topid 字段值。topid 字段存储的就是该栏目的 顶级栏目ID
  2. 外层查询: SELECT typename FROM dede_arctype WHERE id=(...)

    • WHERE id=(...):这里的 就是内层查询得到的结果,也就是顶级栏目的ID。
    • 这个查询的作用是:根据上一步得到的顶级栏目ID,去 dede_arctype 表中查询该顶级栏目的 typename (名称)。
  3. 输出结果:

    • [field:typename/]:输出查询到的顶级栏目名称。
    • [field:typelink/]:输出顶级栏目的链接,这是一个非常有用的附加信息。

使用PHP代码 (最灵活,适合高级用户)

如果你对PHP比较熟悉,并且想在模板中实现更复杂的逻辑,可以直接嵌入PHP代码。

适用场景: 需要在顶级栏目名称的基础上进行复杂的判断或循环。

代码示例:

在模板文件中,你需要将这段代码放在 {dede:php}{/dede:php} 标签之间。

{dede:php}
    // 1. 获取当前栏目的ID
    $currentTypeId = $this->Fields['typeid'];
    // 2. 引入栏目类文件
    require_once(DEDEINC.'/typelink.class.php');
    // 3. 创建栏目对象
    $typeLink = new TypeLink($currentTypeId);
    // 4. 获取顶级栏目信息
    $topType = $typeLink->GetTopType();
    // 5. 输出顶级栏目名称
    echo $topType['typename'];
    // 如果需要链接,可以这样输出
    // echo $topType['typeurl'];
{/dede:php}

代码解析:

  1. $this->Fields['typeid']:在 {dede:php} 标签内,可以通过 $this->Fields 数组访问到当前内容页的所有字段,其中就包括 typeid
  2. require_once(DEDEINC.'/typelink.class.php'):引入DedeCMS的栏目处理类 TypeLink,这个类封装了所有与栏目相关的操作。
  3. new TypeLink($currentTypeId):实例化这个类,并将当前栏目ID作为参数传入。
  4. $typeLink->GetTopType():调用 TypeLink 对象的 GetTopType() 方法,它会返回一个包含顶级栏目所有信息的数组(如 typename, typedir, id 等)。
  5. echo $topType['typename']:直接输出数组中的 typename 键对应的值,即顶级栏目名称。

总结与对比

方法 优点 缺点 推荐度
GetTopTypename() 代码最简洁,官方标准用法,效率高 功能相对单一,只能获取名称 ★★★★★ (首选)
SQL查询 非常灵活,可以获取顶级栏目的任何信息(名称、链接、ID等) 代码稍长,可读性稍差,对SQL不熟的用户可能不易理解 ★★★★☆ (备选)
PHP代码 功能最强大,可以实现任何自定义逻辑 需要PHP基础,代码量最大,模板文件中嵌入PHP可能不够优雅 ★★★☆☆ (高级用户)

对于绝大多数用户来说,直接使用方法一 GetTopTypename() 是最佳选择,它简单、高效且官方支持。

-- 展开阅读全文 --
头像
如何修改dede广告js被屏蔽
« 上一篇 01-03
dede网站地图为何不显示文章列表?
下一篇 » 01-03
取消
微信二维码
支付宝二维码

目录[+]