在当前栏目列表页调用(最常用)
这是最常见的情况,比如你在 plus/list.php 页面(栏目列表页)想显示当前栏目的描述。

(图片来源网络,侵删)
使用全局变量 $typename
这是最简单直接的方法,适用于 DedeCMS 的模板引擎({dede:} 标签)。
代码示例:
<h2>栏目名称:{dede:field name='typename'/}</h2>
<p>栏目描述:{dede:field name='description'/}</p>
代码解释:
{dede:field name='typename'/}:输出当前栏目的名称。{dede:field name='description'/}:输出当前栏目的描述,这个标签在列表页、文章页等带有栏目上下文的页面中,默认就是指“当前栏目”的描述。
完整示例(一个典型的列表页模板 list_article.htm):

(图片来源网络,侵删)
{dede:include filename="head.htm"/}
<div class="main">
<div class="path">
<a href="/">首页</a>
{dede:field name='position'/}
</div>
<div class="left">
<!-- 调用当前栏目的名称和描述 -->
<div class="channel-title">
<h1>{dede:field name='typename'/}</h1>
<p class="description">{dede:field name='description'/}</p>
</div>
<!-- 调用文章列表 -->
<ul class="article-list">
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
<!-- 调用分页 -->
{dede:pagelist listitem='info,index,end,pre,next,pageno' listsize='5'/}
</div>
{dede:include filename="right.htm"/}
</div>
{dede:include filename="footer.htm"/}
页调用
页(article_article.htm),你同样可以调用该文章所属栏目的描述。
这里推荐使用 {dede:field} 标签,因为它更明确。
代码示例:
<h1>{dede:field.title/}</h1>
<div class="article-info">
发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}
所属栏目:<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
栏目描述:{dede:field name='description'/}
</div>
<div class="article-content">
{dede:field.body/}
</div>
代码解释:
{dede:field name='typeurl'/}:获取当前栏目的链接地址。- 其余字段和方法与列表页相同,因为在文章内容页,
{dede:field}的上下文就是当前文章及其所属栏目。
在首页或其他非栏目页面调用
这是一个稍微复杂一点但非常实用的场景,比如你想在首页的某个位置显示“公司简介”这个栏目的描述。
这时,你不能直接使用 {dede:field description/},因为首页没有“当前栏目”,你需要使用 {dede:channel} 或 {dede:type} 标签来指定你想要调用的栏目。
方案 A:使用 {dede:channel} 标签(推荐)
{dede:channel} 通常用于生成栏目导航,但它也可以用来获取单个栏目的信息。
代码示例:
假设“公司简介”栏目的 ID 是 2。
<h2>关于我们</h2>
<p>{dede:channel typeid='2'}[field:description]{/dede:channel}</p>
代码解释:
typeid='2':这是关键,指定了你要调用的栏目的 ID,你需要在后台“栏目管理”中找到目标栏目的 ID。[field:description]:在{dede:channel}标签内部,使用[field:xxx]来获取该栏目的属性。
方案 B:使用 {dede:type}
{dede:type} 和 {dede:channel} 用法非常相似,也可以用来获取指定栏目的信息。
代码示例:
同样,假设“公司简介”栏目的 ID 是 2。
<h2>联系我们</h2>
<p>{dede:type typeid='2'}[field:description]{/dede:type}</p>
代码解释:
typeid='2':同样是指定栏目 ID。
[field:description]:获取该栏目的描述。
使用 SQL 查询(最灵活)
如果你想在自定义 PHP 文件或者需要更复杂逻辑的地方调用栏目描述,可以直接执行 SQL 查询。
PHP 代码示例:
<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入核心文件
// 假设你要获取栏目ID为1的描述
$channel_id = 1;
// 执行SQL查询
$dsql->SetQuery("SELECT description FROM `#@__arctype` WHERE id = $channel_id");
$dsql->Execute();
$row = $dsql->GetArray();
if($row) {
echo "<h3>栏目ID为 $channel_id 的描述是:</h3>";
echo $row['description'];
} else {
echo "未找到ID为 $channel_id 的栏目。";
}
?>
代码解释:
require_once (dirname(__FILE__) . "/include/common.inc.php");:必须引入这个文件,它包含了 DedeCMS 的数据库连接和核心函数。
$dsql:这是 DedeCMS 的全局数据库连接对象。
#@__arctype:这是 dede_arctype 表的前缀替换写法,#@__ 会被你在配置文件中设置的表前缀替换。
SELECT description FROM ... WHERE id = ...:标准的 SQL 查询语句,用于从栏目表中获取指定 ID 的描述字段。
总结与最佳实践
场景
推荐方法
示例代码
当前栏目列表页
使用 {dede:field name='description'/}
{dede:field name='description'/}
页
使用 {dede:field name='description'/}
{dede:field name='description'/}
首页/其他页面
使用 {dede:channel typeid='N'}
{dede:channel typeid='2'}[field:description]{/dede:channel}
PHP 自定义文件
使用 SQL 查询
$dsql->GetOne("SELECT description FROM#@__arctypeWHERE id=2");
重要提示:
- 栏目 ID:在首页等非栏目页调用时,
typeid 是必须的,请务必去后台“栏目管理”中找到你要调用的那个栏目的准确 ID。
- 缓存问题:如果修改了栏目描述但前台页面没有立即更新,请检查后台是否开启了模板缓存,可以尝试在后台“生成” -> “更新HTML” -> “更新栏目HTML”,或者清除缓存。
- SEO 优化:栏目描述对 SEO 很重要,建议每个栏目都填写一段有吸引力的、包含关键词的描述。
希望这份详细的指南能帮助你成功调用 DedeCMS 的栏目描述!
{dede:type} 和 {dede:channel} 用法非常相似,也可以用来获取指定栏目的信息。
代码示例:
同样,假设“公司简介”栏目的 ID 是 2。
<h2>联系我们</h2>
<p>{dede:type typeid='2'}[field:description]{/dede:type}</p>
代码解释:
typeid='2':同样是指定栏目 ID。[field:description]:获取该栏目的描述。
使用 SQL 查询(最灵活)
如果你想在自定义 PHP 文件或者需要更复杂逻辑的地方调用栏目描述,可以直接执行 SQL 查询。
PHP 代码示例:
<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入核心文件
// 假设你要获取栏目ID为1的描述
$channel_id = 1;
// 执行SQL查询
$dsql->SetQuery("SELECT description FROM `#@__arctype` WHERE id = $channel_id");
$dsql->Execute();
$row = $dsql->GetArray();
if($row) {
echo "<h3>栏目ID为 $channel_id 的描述是:</h3>";
echo $row['description'];
} else {
echo "未找到ID为 $channel_id 的栏目。";
}
?>
代码解释:
require_once (dirname(__FILE__) . "/include/common.inc.php");:必须引入这个文件,它包含了 DedeCMS 的数据库连接和核心函数。$dsql:这是 DedeCMS 的全局数据库连接对象。#@__arctype:这是dede_arctype表的前缀替换写法,#@__会被你在配置文件中设置的表前缀替换。SELECT description FROM ... WHERE id = ...:标准的 SQL 查询语句,用于从栏目表中获取指定 ID 的描述字段。
总结与最佳实践
| 场景 | 推荐方法 | 示例代码 |
|---|---|---|
| 当前栏目列表页 | 使用 {dede:field name='description'/} |
{dede:field name='description'/} |
| 页 | 使用 {dede:field name='description'/} |
{dede:field name='description'/} |
| 首页/其他页面 | 使用 {dede:channel typeid='N'} |
{dede:channel typeid='2'}[field:description]{/dede:channel} |
| PHP 自定义文件 | 使用 SQL 查询 | $dsql->GetOne("SELECT description FROM#@__arctypeWHERE id=2"); |
重要提示:
- 栏目 ID:在首页等非栏目页调用时,
typeid是必须的,请务必去后台“栏目管理”中找到你要调用的那个栏目的准确 ID。 - 缓存问题:如果修改了栏目描述但前台页面没有立即更新,请检查后台是否开启了模板缓存,可以尝试在后台“生成” -> “更新HTML” -> “更新栏目HTML”,或者清除缓存。
- SEO 优化:栏目描述对 SEO 很重要,建议每个栏目都填写一段有吸引力的、包含关键词的描述。
希望这份详细的指南能帮助你成功调用 DedeCMS 的栏目描述!
