dede文章页如何调用当前栏目名称?

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

使用全局标签 {dede:field name='typename'/} (最推荐,最简单)

这是最直接、最简单的方法,也是官方推荐的方式。{dede:field} 标签用于获取当前文档的某个字段属性,'typename' 正好对应的就是“栏目名称”。

适用场景:在文章内容页(article_article.htm)模板中,直接调用当前文章所属的栏目名称。

代码示例

<a href="{dede:field name='typelink'/}">{dede:field name='typename'/}</a>

代码解析

  • {dede:field name='typename'/}:直接输出当前文章的栏目名称。
  • {dede:field name='typelink'/}:调用当前文章栏目的链接地址,将它和 typename 结合起来,可以制作成一个可点击的栏目链接,这是最佳实践。

使用SQL查询标签 {dede:sql} (灵活,但需谨慎)

当你需要更复杂的逻辑,比如根据某些条件调用栏目信息时,可以使用 {dede:sql} 标签直接执行SQL查询。

适用场景

  1. 在文章页调用上级父栏目的名称。
  2. 调用栏目的其他信息,如栏目简介、关键字等。
  3. 在非文章页(如首页、列表页)调用某个特定栏目的名称。

代码示例 1:在文章页调用父栏目名称

假设你想在文章页显示其所属的顶级栏目(一级栏目)的名称。

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

代码解析

  • ~typeid~:这是DedeCMS的一个内置变量,代表当前文章的栏目ID。{dede:sql} 标签会自动将其替换为真实的ID值。
  • 内层查询 (SELECT topid FROMdede_arctypeWHERE id = ~typeid~):首先根据当前栏目ID (~typeid~) 查找它的父栏目ID (topid)。
  • 外层查询 SELECT typename FROM ... WHERE id = ...:然后根据查找到的父栏目ID,去 dede_arctype 表(栏目表)中查询对应的栏目名称 (typename)。

代码示例 2:调用栏目其他信息

栏目名称:{dede:field name='typename'/}<br>
栏目链接:{dede:field name='typelink'/}<br>
栏目描述:
{dede:sql sql="SELECT description FROM `dede_arctype` WHERE id = ~typeid~"}
    [field:description/]
{/dede:sql}

使用PHP代码 (功能最强大)

如果你需要在模板中执行非常复杂的逻辑,或者需要结合PHP的流程控制(如 if 判断、foreach 循环等),可以直接在模板文件中嵌入PHP代码。

适用场景

  • 需要根据栏目名称进行不同的判断或显示不同的内容。
  • 需要对栏目名称进行二次处理(如截取、替换等)。

操作步骤

  1. 打开你的文章页模板文件,通常是 /templets/default/article_article.htm
  2. 在你希望显示栏目名称的位置,添加如下PHP代码:
<?php
    // 获取当前文章的栏目ID
    $typeid = $arcview->typeid;
    // 实例化栏目类
    $typeDir = new TypeLink();
    $typeInfo = $typeDir->GetTypeInfo($typeid);
    // 输出栏目名称和链接
    echo $typeInfo['typename'];
    // echo "<a href='".$typeInfo['typeurl']."'>".$typeInfo['typename']."</a>";
?>

代码解析

  • $arcview->typeid:通过全局对象 $arcview 获取当前文章的栏目ID。
  • new TypeLink():实例化DedeCMS的栏目处理类。
  • GetTypeInfo($typeid):调用该类的 GetTypeInfo 方法,传入栏目ID,获取该栏目的完整信息,返回一个包含 typename(名称)、typeurl(链接)等键值的数组。
  • echo $typeInfo['typename'];:直接输出数组中的 typename 值。

总结与对比

方法 优点 缺点 推荐度
{dede:field} 最简单、最直接、官方支持、效率高 灵活性较低,只能调用当前文章的基本字段信息 ★★★★★ (99%的情况下使用此方法)
{dede:sql} 非常灵活,可以查询任意表,获取任意信息 需要懂SQL,有安全风险(如果变量处理不当),效率略低于field ★★★☆☆ (用于调用父栏目或其它非标准字段时)
PHP代码 功能最强大,可以实现任何逻辑 代码侵入性强,不易于模板维护,需要一定的PHP基础 ★★☆☆☆ (仅在极特殊、复杂的逻辑需求下使用)

常见问题排查 (Q&A)

Q: 为什么我用了 {dede:field name='typename'/} 显示不出来? A: 请检查以下几点:

  1. 确认模板位置:确保你是在文章内容页模板 (article_article.htm) 中使用,而不是在列表页 (list_article.htm) 或首页 (index.htm),在不同页面,可用的变量是不同的。
  2. 检查标签拼写:确保标签名称拼写正确,{dede:field name='typename'/} 中的 typename 不能写错。
  3. 检查缓存:登录DedeCMS后台,点击“系统” -> “一键更新缓存”,然后更新一下文章页面。
  4. 检查文件编码:确保模板文件是 UTF-8 无BOM格式编码,这有时会导致标签解析异常。

Q: 我想在列表页调用栏目名称怎么办? A: 在列表页模板 (list_article.htm) 中,调用当前列表页所属的栏目名称,同样使用 {dede:field name='typename'/} 即可,因为列表页本身就是为某个栏目服务的。

希望这些信息能帮助到你!

-- 展开阅读全文 --
头像
织梦上传图片报错,如何解决?
« 上一篇 02-12
flag p c 织梦
下一篇 » 02-12

相关文章

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

目录[+]