使用全局标签 {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:在文章页调用父栏目名称
假设你想在文章页显示其所属的顶级栏目(一级栏目)的名称。
{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代码。
适用场景:
- 需要根据栏目名称进行不同的判断或显示不同的内容。
- 需要对栏目名称进行二次处理(如截取、替换等)。
操作步骤:
- 打开你的文章页模板文件,通常是
/templets/default/article_article.htm。 - 在你希望显示栏目名称的位置,添加如下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: 请检查以下几点:
- 确认模板位置:确保你是在文章内容页模板 (
article_article.htm) 中使用,而不是在列表页 (list_article.htm) 或首页 (index.htm),在不同页面,可用的变量是不同的。 - 检查标签拼写:确保标签名称拼写正确,
{dede:field name='typename'/}中的typename不能写错。 - 检查缓存:登录DedeCMS后台,点击“系统” -> “一键更新缓存”,然后更新一下文章页面。
- 检查文件编码:确保模板文件是
UTF-8无BOM格式编码,这有时会导致标签解析异常。
Q: 我想在列表页调用栏目名称怎么办?
A: 在列表页模板 (list_article.htm) 中,调用当前列表页所属的栏目名称,同样使用 {dede:field name='typename'/} 即可,因为列表页本身就是为某个栏目服务的。
希望这些信息能帮助到你!
