页(article_article.htm)中调用正文
这是最简单、最直接的情况,文章内容页默认已经加载了文章数据,你只需要使用系统提供的全局变量即可。

核心变量: {dede:field.body/}
这个变量直接输出当前文章的完整正文内容,包含了你在后台编辑器中设置的所有HTML标签、图片、视频等。
示例代码:
在你的 article_article.htm 模板文件中,找到你想放置正文内容的位置,直接使用如下代码:

<article class="article-content">
{dede:field.body/}
</article>
特点:
- 最常用:用于文章详情页的显示。
- 包含所有格式:会原样输出编辑器中的所有内容。
- 无需额外设置:在文章内容页中,此变量是默认可用的。
在列表页或首页调用文章摘要(推荐)
在首页、列表页、栏目页等地方,我们通常不希望显示完整的文章正文,因为那样会非常长,影响页面加载速度和用户体验,我们一般只调用文章的摘要。
核心标签: {dede:field.description function='html2text(@me)'/}
这个标签的作用是:

{dede:field.description}:获取文章在后台“字段中填写的内容。function='html2text(@me)':这是一个系统内置的函数,它会将获取到的HTML格式的摘要内容纯文本化,去除所有HTML标签,只保留文字。
使用场景:
-
在列表页(
list_article.htm){dede:list pagesize='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <p class="summary">[field:description function='html2text(@me)'/]...</p> </li> {/dede:list} -
在首页(
index.htm){dede:arclist titlelen='30' row='5'} <div class="entry"> <h2><a href="[field:arcurl/]">[field:title/]</a></h2> <p class="excerpt">[field:description function='html2text(@me)'/]</p> </div> {/dede:arclist}
特点:
- 性能最佳:只调用简短摘要,页面加载快。
- 用户体验好:列表页简洁明了,用户可以快速浏览。
- 需要手动填写摘要:这个方法要求你在发布文章时,必须在“字段填写内容。
在列表页或首页调用正文的一部分(不推荐,但可行)
如果你没有填写摘要,又想在列表页显示正文的前N个字符,可以通过修改模板文件来实现。注意:此方法会增加服务器负担,不推荐在大型网站上使用。
操作步骤:
-
打开
/include/arc.listview.class.php文件。 -
找到大约第740行左右的代码(不同版本行号可能不同):
// 替换正文里的内容 $this->Fields['body'] = preg_replace("/\[page\](.+?)\[\/page\]/is", '', $this->Fields['body']); -
在这行代码下面,添加如下代码来截取正文:
// 截取正文前200个字符作为摘要 $this->Fields['description'] = cn_substr(strip_tags(htmlspecialchars_decode($this->Fields['body'])), 200);
strip_tags():去除HTML标签。htmlspecialchars_decode():将HTML实体转换回字符。cn_substr():DedeCMS的截取字符串函数,第二个参数200是截取的长度,你可以根据需要修改。
-
保存文件。
添加完成后,你就可以在模板中像调用摘要一样调用正文了:
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p class="summary">[field:description/]...</p>
</li>
{/dede:list}
特点:
- 无需手动填写摘要:系统自动从正文中提取。
- 增加服务器负担:每次列表页加载时,都需要对每篇文章的正文进行处理,会影响性能。
- 可能格式错乱:如果正文中包含代码或不规范的HTML,截取结果可能不理想。
使用自定义宏标签(最灵活、最推荐的高级方法)
如果你想在多个地方(如首页、列表页、自定义页面)都能灵活地调用文章内容,并且希望有统一的控制,那么使用自定义宏标签是最佳选择。
操作步骤:
-
进入后台:登录DedeCMS后台 ->
系统->SQL命令行工具。 -
执行SQL:在输入框中粘贴以下SQL语句,然后点击“查询”执行。
ALTER TABLE `dede_arctype` ADD `body` TEXT NOT NULL;
这句代码会给栏目表(
dede_arctype)增加一个名为body的文本字段,用于存储模板代码。 -
修改模板文件:
- 打开
/include/typelink.class.php文件。 - 找到
function GetList函数(大约在第290行),在函数内$typeinfos数组赋值的最后,添加一行代码:$typeinfos['templet'] = $this->TypeInfos['templet'];
- 打开
/include/arc.listview.class.php文件。 - 找到
function GetList函数(大约在第750行),在函数内$this->Fields赋值的最后,添加一行代码:$this->Fields['templet'] = $this->TypeInfos['templet'];
- 打开
-
使用自定义宏标签: 你可以在任何使用
{dede:list}或{dede:arclist}的地方,通过[field:templet/]来调用一个自定义的模板片段。示例: 假设你想在列表页调用文章正文的前100个字符,并加上“阅读更多”链接。
-
第一步:在后台的“栏目管理”中,编辑任意一个栏目,在“自定义栏目模板”中填入你的模板代码,
[field:body function='cn_substr(html2text(@me), 100)'/]... <a href="[field:arcurl/]">阅读更多</a>html2text(@me):先将正文转为纯文本。cn_substr(..., 100):再截取前100个字符。
-
第二步:在你的列表页模板(
list_article.htm)中,使用[field:templet/]来调用它:{dede:list pagesize='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <p class="summary">[field:templet/]</p> </li> {/dede:list}
-
特点:
- 极度灵活:可以为不同栏目设置不同的内容展示方式。
- 代码复用:将复杂的逻辑封装在栏目设置中,模板文件本身非常简洁。
- 性能可控:逻辑处理在后台设置,前端调用简单,性能影响小。
总结与推荐
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 文章详情页 | {dede:field.body/} |
简单直接,功能完整 | 无 |
| 列表页/首页 | {dede:field.description function='html2text(@me)'/} |
性能好,用户体验佳 | 需要手动填写摘要 |
| 列表页/首页 (无摘要) | 修改arc.listview.class.php |
自动生成,无需手动 | 增加服务器负担,可能出错 |
| 多场景灵活调用 | 自定义宏标签 [field:templet/] |
最灵活,可复用,强大 | 设置步骤稍复杂 |
给新手的建议:
- 先掌握方法一和方法二,它们能满足90%以上的日常需求。
- 发布文章时,养成填写摘要的好习惯,这对SEO和用户体验都至关重要。
- 当你的网站需要更复杂的个性化展示时,再深入学习和使用方法四(自定义宏标签)。
