{dede:field.body/}
无论你使用哪种方法,调用文章内容本身最核心、最常用的标签都是 {dede:field.body/},这个标签会输出当前文章在编辑器中填写的正文内容。

在文章详情页(内容页)调用
这是最简单的情况,当你已经在文章的详情页(article_articleid.html)时,直接使用核心标签即可。
适用场景:
article_articleid.html页)list_栏目ID.html(栏目列表页,通过{dede:list}或{dede:arclist}循环出来的单篇文章内容页)
代码示例:
在你的文章详情页模板文件(通常是 templets/default/article_article.htm)中,你可以这样写:
<h1>{dede:field.title/}</h1>
<div class="info">
发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}
作者:{dede:field.author/}
来源:{dede:field.source/}
点击:{dede:field.click/}
</div>
<div class="content">
<!-- 这里就是调用文章正文内容的核心代码 -->
{dede:field.body/}
</div>
说明:

{dede:field.body/}会原样输出你在后台编辑器中输入的所有内容,包括图片、视频、格式等。- 为了安全或样式统一,你可能需要对内容进行处理,比如过滤掉某些标签,这时可以使用
function属性。
在列表页、首页等页面调用文章摘要或截取内容
在首页、栏目列表页等地方,我们通常不会显示全文,而是显示一部分摘要,或者手动截取前几百个字作为简介。
场景1:使用文章摘要(推荐)
在后台发布文章时,有一个“输入框,这是最规范的做法。
调用标签:{dede:field.description/}
代码示例(在首页或列表页使用 {dede:arclist} 标签):

{dede:arclist titlelen='50' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
</li>
{/dede:arclist}
说明:
[field:description/]直接调用后台填写的摘要内容。function='cn_substr(@me, 100)'是一个常用技巧,表示即使你没有填写摘要,它也会自动从文章正文中截取前100个字符作为显示。cn_substr是织梦的字符截取函数。
场景2:手动截取文章正文内容
如果你没有填写摘要,又想直接从文章正文中截取一部分作为简介,可以使用下面的方法。
调用标签:通过 {dede:field.body/} 结合 function 属性。
代码示例(同样在 {dede:arclist} 内部):
{dede:arclist titlelen='50' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!--
从文章正文中过滤掉 HTML 标签,然后截取前100个字符。
注意:这里的 [field:id/] 是当前文章的 ID,用于获取内容。
-->
<p class="summary">
[field:id function="GetOneArchiveBody(@me, 100)"/]...
</p>
</li>
{/dede:arclist}
这里需要用到自定义函数,因为 arclist 标签本身不支持直接调用 body 字段,你需要按以下步骤操作:
步骤1:创建自定义函数文件
- 打开织梦的
include/helpers/目录。 - 新建一个名为
archive.helper.php的文件(如果已存在则直接编辑)。 - 在文件中添加以下函数:
<?php
if(!defined('DEDEINC')) exit('Request Error!');
/**
* 获取指定文章ID的内容,并过滤HTML标签后截取指定长度
* @param int $aid 文章ID
* @param int $len 截取长度
* @return string
*/
function GetOneArchiveBody($aid, $len = 200)
{
// 1. 获取文章内容
$row = $GLOBALS['dsql']->GetOne("SELECT body FROM `#@__addonarticle` WHERE aid = '{$aid}'");
if (!is_array($row)) {
return '';
}
// 2. 过滤掉所有HTML标签
$content = strip_tags($row['body']);
// 3. 截取指定长度的字符串
$content = cn_substr($content, $len);
return $content;
}
?>
注意:
- 如果你的文章内容存储在主表
#@__archives的body字段,请将#@__addonarticle改为#@__archives。 strip_tags()函数用于移除HTML和PHP标签。cn_substr()是织梦自带的截取函数,可以更好地处理中文字符。
步骤2:在模板中使用
现在你就可以在模板中像上面示例代码那样调用这个函数了。
[field:id function="GetOneArchiveBody(@me, 100)"/]
使用SQL语句直接查询(高级用法)
当你需要更灵活地控制查询条件,或者调用一些非标准的字段时,可以直接使用SQL语句。
适用场景:
- 调用自定义字段的内容。
- 根据复杂条件(如点击量、特定时间等)筛选文章并调用内容。
代码示例(在首页或列表页使用 {dede:sql} 标签):
{dede:sql sql="SELECT title, body FROM `#@__archives` WHERE typeid = 1 LIMIT 0, 10"}
<div class="custom-article">
<h2>[field:title/]</h2>
<div>[field:body/]</div>
</div>
{/dede:sql}
说明:
sql属性里填写你的SQL查询语句。#@__是织梦数据表的前缀,如果你修改了默认的前缀,这里会自动替换。- 在
{dede:sql}循环体内,使用[field:字段名/]来输出查询结果。
常见问题与注意事项
-
内容中的图片路径问题 当你调用文章内容时,如果文章里的图片路径是相对路径(如
/uploads/images/2025/10/01.jpg),在移动到新服务器或不同目录时可能会失效,织梦默认会处理这个问题,但有时也会出错,确保你在后台“系统”->“核心设置”中,“附件目录选项”设置正确。 -
内容格式错乱 如果从不同地方复制的内容粘贴到编辑器,可能会导致格式混乱,建议使用织梦自带的编辑器或兼容性好的编辑器(如百度UEditor),并保持编辑器设置的统一。
-
安全过滤 直接输出
{dede:field.body/}存在XSS(跨站脚本)攻击的风险,如果内容来自用户投稿,强烈建议进行过滤,可以使用htmlspecialchars函数进行转义,或者在自定义函数中更严格地过滤标签。示例(在模板中过滤):
{dede:field.body function='htmlspecialchars(@me)'/}注意:这样会过滤掉所有HTML标签,使内容变成纯文本,通常推荐在PHP函数层面处理,而不是直接在模板里。
| 调用位置 | 推荐方法 | 核心标签/代码 |
|---|---|---|
| 文章详情页 | 直接调用 | {dede:field.body/} |
| 列表页/首页 (显示摘要) | 调用后台摘要 | [field:description/] 或 [field:description function='cn_substr(@me, 100)'/] |
| 列表页/首页 (截取正文) | 自定义函数 | [field:id function="GetOneArchiveBody(@me, 100)"/] (需提前创建函数) |
| 复杂/自定义查询 | SQL语句 | {dede:sql sql="..."} -> [field:body/] |
希望这份详细的指南能帮助你完全掌握在织梦中调用文章内容的方法!
