这是一个非常常见的需求,但直接调用 body 会带来一些性能和显示上的问题,因此了解其正确用法和替代方案非常重要。

(图片来源网络,侵删)
直接调用 Body 的方法 (不推荐)
最直接的方法是使用 body 字段,在 {dede:arclist} 标签内,你可以通过 [field:body/] 来获取文章的正文内容。
示例代码:
{dede:arclist row='5' titlelen='30'}
<li>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<!-- 直接调用 body -->
<div>[field:body/]</div>
</li>
{/dede:arclist}
⚠️ 重要警告:为什么强烈不推荐直接使用 [field:body/]?
- 性能极差:
{dede:arclist}的主要作用是快速列出文章的摘要(标题、图片、简介等),它的底层查询是优化的,而body字段通常非常大(包含大量HTML和文本),直接调用会导致每次查询都要读取和传输完整的长文本,这会急剧增加数据库和服务器的负载,尤其是在列表页有大量文章时,网站会变得非常卡顿。 - 样式混乱:
body字段中包含了完整的文章格式(如<p>、<img>、<h2>等HTML标签),直接输出到列表页,会破坏列表页的整体布局和样式,导致页面排版错乱。 - 内容过长:文章的正文通常很长,直接显示在列表中会使得页面非常冗长,用户体验极差。
推荐的最佳实践:使用描述 (description) 字段
这是最常用也是最规范的方法,在后台发布文章时,手动填写“文章描述”或“内容简介”字段,然后在列表页调用这个字段。

(图片来源网络,侵删)
操作步骤:
-
在后台填写描述:
- 登录 DedeCMS 后台。
- 进入“[核心]-[内容模型管理]”,选择你的文章模型(默认是“文章”)。
- 点击“字段管理”,确保有一个名为
description的字段,后台增加内容表单”中是勾选显示的。 - 发布或编辑文章时,在“文章内容”编辑框下方,通常会有一个“文章简介”或“内容简介”的输入框,务必在这里填写文章的摘要会保存到
description字段。
-
在模板中调用
description:{dede:arclist row='5' titlelen='30'} <li> <h3><a href="[field:arcurl/]">[field:title/]</a></h3> <!-- 调用文章描述/简介 --> <div>[field:description function='cn_substr(@me, 100)'/]</div> <!-- 截取前100个字符 --> </li> {dede:arclist}
优点:

(图片来源网络,侵删)
- 性能优秀:
description字段是专门为摘要设计的,长度适中,查询速度快。 - 控制灵活:你可以通过
function='cn_substr(@me, 100)'这样的方式轻松控制摘要的显示长度。 - 样式整洁通常是纯文本或简单的格式,便于在列表页进行CSS样式控制。
如果非要自动截取 Body 内容怎么办?
如果你没有在后台填写 description,又希望从 body 中自动截取一部分作为摘要,可以使用 function 属性结合 strip_tags 和 cn_substr 函数来实现。
核心思路:
strip_tags:去除body中的所有 HTML 标签,只保留纯文本。cn_substr:从纯文本中截取指定长度的字符串。
示例代码:
{dede:arclist row='5' titlelen='30'}
<li>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<!--
1. @me 表示当前字段的原始值,即 [field:body/] 的内容
2. strip_tags(@me) 去掉所有HTML标签
3. cn_substr(...) 截取前150个字符
-->
<div>[field:body function='cn_substr(strip_tags(@me), 150)'/]...</div>
</li>
{/dede:arclist}
代码解析:
[field:body ...]:指定要操作的字段是body。function='...':对字段值进行函数处理。strip_tags(@me):strip_tags是 PHP 的内置函数,作用是删除字符串中的 HTML 和 PHP 标签。@me是 DedeCMS 模板中的特殊变量,代表当前标签的原始值。cn_substr(..., 150):cn_substr是 DedeCMS 的函数,用于安全地截取中文字符串,避免出现乱码,这里我们截取去除标签后的前 150 个字符。- 在截取的文本末尾手动加上省略号,表示内容未完。
注意:这种方法虽然可行,但依然比直接调用 description 要慢,因为它需要对每篇文章的 body 内容进行 PHP 字符串处理。它只是一个备选方案,最佳方案仍然是使用 description 字段。
高级用法:调用自定义字段 (自定义字段)
如果你的文章模型中添加了自定义的字段来存储摘要(myintro),调用方式也非常简单。
假设你添加了一个名为 myintro 的自定义文本字段。
在模板中调用:
{dede:arclist row='5' titlelen='30'}
<li>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<!-- 调用自定义字段 myintro -->
<div>[field:myintro/]</div>
</li>
{/dede:arclist}
| 方法 | 代码示例 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|---|
| 直接调用 Body | [field:body/] |
- | 性能极差、样式混乱、内容过长 | ⭐ (不推荐) |
| 调用描述字段 | [field:description/] |
性能好、控制灵活、样式整洁 | 需要手动在后台填写 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| 自动截取 Body | [field:body function='cn_substr(strip_tags(@me), 150)'/] |
无需手动填写,自动生成摘要 | 性能不如 description,仍有额外开销 |
⭐⭐⭐ (备选方案) |
| 调用自定义字段 | [field:myintro/] |
灵活,可扩展性强 | 需要先在后台添加和配置字段 | ⭐⭐⭐⭐ (特定场景推荐) |
最终建议:
养成在发布文章时填写“文章简介”(description 字段)的好习惯,这是最高效、最规范的 DedeCMS 列表页内容调用方式。
