field.body 是文章内容页(article_article.htm 模板)中用于显示文章正文的字段,修改它通常有以下几个目的:

- 修改文章内容的显示样式(如字体、颜色、行间距、添加缩进等)。
- 前后自动添加特定内容(如版权声明、作者信息、相关文章链接等)。
- 过滤或修改文章内容中的特定元素(如移除某些标签、自动给图片添加链接等)。
- 调用文章内容中的图片。
下面我将根据不同的修改需求,提供详细的解决方案和代码示例。
修改文章内容的显示样式(CSS 控制)
这是最常见的需求,我们通常不直接修改 field.body 的值,而是用一个 <div> 或 <p> 标签把它包裹起来,然后通过 CSS 来控制这个标签的样式。
方法:
- 打开你的文章内容页模板文件,路径通常是
/templets/你的默认模板风格/article_article.htm。 - 找到
{dede:field.body/}这一行。 - 用
<div>或<p>标签将其包裹,并赋予一个class名。
示例代码:

{dede:field.body/}
修改为:
<div class="article-content">
{dede:field.body/}
</div>
- 在你的 CSS 文件(通常是
/templets/你的默认模板风格/style.css)中,定义.article-content的样式。
CSS 示例 (style.css):
.article-content {
font-family: "Microsoft YaHei", "微软雅黑", Arial, sans-serif; /* 设置字体 */
font-size: 16px; /* 设置字号 */
line-height: 1.8; /* 设置行高,让阅读更舒适 */
color: #333; /* 设置文字颜色 */
text-align: justify; /* 两端对齐 */
padding: 20px 0; /* 上下内边距 */
}
中的图片样式 */
.article-content img {
max-width: 100%; /* 图片最大宽度为容器宽度,防止溢出 */
height: auto; /* 高度自动,保持图片比例 */
margin: 10px 0; /* 图片上下边距 */
border-radius: 5px; /* 图片圆角 */
}
中的段落样式 */
.article-content p {
margin-bottom: 15px; /* 段落下边距,增加段落间距 */
text-indent: 2em; /* 段落首行缩进2个字符 */
}
优点:
- 内容与样式分离:符合现代网页开发的最佳实践。
- 灵活可控:可以通过修改 CSS 轻松调整样式,无需改动模板文件。
- 源:后台编辑的文章内容本身不会被修改。
前后自动添加内容
如果你想在所有文章的开头或结尾都加上一段固定的文字或代码,可以使用 str_replace 函数。

方法:
- 同样,打开
article_article.htm模板文件。 - 找到
{dede:field.body/}。 - 使用 PHP 的
str_replace函数进行替换。
示例代码:
假设我们想在文章开头加上“【本文由本站原创,转载请注明出处!】”,在文章结尾加上“【文章结束】”。
{dede:field.body function='str_replace("本文", "本文【本文由本站原创,转载请注明出处!】", @me)'/}
上面的写法有局限性,更推荐使用 preg_replace 或者在 {dede:field.body/} 外层包裹一个 <div>,然后通过修改这个 <div> 的 innerHTML 来实现,但最简单直接的方法是:
<!-- 在文章开头添加内容 -->
{dede:field.body function='str_replace("<p>", "<p>【本文由本站原创,转载请注明出处!】", @me)'/}
<!-- 在文章结尾添加内容 -->
{dede:field.body function='str_replace("</p>", "</p><p>【文章结束】</p>", @me)'/}
更健壮的写法(推荐):
为了更精确地控制,可以创建一个自定义函数,然后在模板里调用。
-
创建自定义函数 在
/include/extend.func.php文件中(如果不存在则创建一个)添加以下代码:/** * 在文章内容前后添加自定义内容 * @param string $body 文章内容 * @return string 处理后的文章内容 */ function addContentAround($body) { $header = '<div class="article-copyright">本文由本站原创,转载请注明出处!</div>'; $footer = '<div class="article-related">相关文章:<a href="#">文章1</a> | <a href="#">文章2</a></div>'; // 确保body不为空 if (empty($body)) { return $body; } return $header . $body . $footer; } -
在模板中调用 修改
article_article.htm文件:{dede:field.body function='addContentAround(@me)'/}然后在你的 CSS 文件中为
.article-copyright和.article-related添加样式即可。
过滤或修改文章内容中的特定元素
你希望文章中所有 <img> 标签都自动加上一个链接,或者移除某些特定的 HTML 标签。
方法:
同样,我们推荐在 /include/extend.func.php 中创建一个自定义处理函数。
示例 1:给所有图片添加外链
// 在 /include/extend.func.php 中添加
function addLinkToImages($body) {
// 使用正则表达式,查找所有 <img> 标签,并在其外层包裹 <a href="#">...</a>
// 注意:这里的 # 链接需要根据你的需求动态生成,例如跳转到第一张图片的大图页面
$pattern = '/(<img\s+[^>]*>)/i';
$replacement = '<a href="#" target="_blank">$1</a>';
return preg_replace($pattern, $replacement, $body);
}
在模板中调用:
{dede:field.body function='addLinkToImages(@me)'/}
示例 2:移除文章中的 <script> 标签(安全考虑)
// 在 /include/extend.func.php 中添加
function removeScriptTags($body) {
// 使用正则表达式移除所有 <script>...</script> 标签及其内容
return preg_replace('/<script.*?>.*?<\/script>/is', '', $body);
}
在模板中调用:
{dede:field.body function='removeScriptTags(@me)'/}
调用文章内容中的第一张图片
这是一个非常实用的功能,常用于列表页摘要图或相关文章缩略图。
方法:
-
创建获取第一张图片的函数 在
/include/extend.func.php中添加以下代码:/** * 获取文章内容中的第一张图片路径 * @param string $body 文章内容 * @param string $defaultImg 如果没有图片,返回的默认图片路径 * @return string 图片路径 */ function getFirstImgFromContent($body, $defaultImg = '/images/default.jpg') { if (empty($body)) { return $defaultImg; } // 匹配第一个img标签的src属性 preg_match_all('/<img.*?src=[\"|\']?(.*?)[\"|\'|\s]/i', $body, $imgArray); $imgSrc = !empty($imgArray[1][0]) ? $imgArray[1][0] : $defaultImg; // 如果图片是相对路径,则补全为绝对路径 if (strpos($imgSrc, 'http') !== 0 && strpos($imgSrc, '/') !== 0) { $imgSrc = '/' . $imgSrc; } return $imgSrc; } -
在模板中调用 你可以在任何需要的地方调用这个函数,例如文章列表页(
list_article.htm)。<!-- 在文章列表页循环中 --> {dede:list} <li> <!-- 调用函数,如果没有图片则使用 /images/noimg.jpg 作为默认图 --> <img src="{dede:field.body function='getFirstImgFromContent(@me, "/images/noimg.jpg")'/}" alt="{dede:field.title/}" /> <a href="[field:arcurl/]">[field:title/]</a> </li> {/dede:list}
总结与注意事项
| 修改需求 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 修改显示样式 | 用 <div class="xxx"> 包裹 field.body,用 CSS 控制 |
内容与样式分离,灵活,不影响源数据 | 需要懂 CSS |
| 前后添加内容 | 在 extend.func.php 写函数,用 function 调用 |
逻辑清晰,可复用,功能强大 | 需要懂一点 PHP |
| 过滤/修改内容 | 在 extend.func.php 写函数,用 function 调用 |
安全、可控,能实现复杂逻辑 | 需要懂 PHP 正则表达式 |
| 中的元素 | 在 extend.func.php 写函数,用 function 调用 |
功能强大,扩展性强 | 需要懂 PHP 正则表达式 |
重要提醒:
- 修改模板前备份:任何对模板文件的修改,都建议先备份原始文件。
- 修改
extend.func.php后清空缓存:在 DedeCMS 后台 -> 系统 -> 一键更新缓存 或 更新系统缓存,否则新添加的函数可能不会生效。 - 使用代码编辑器:请使用专业的代码编辑器(如 VS Code, Sublime Text, Notepad++)来修改 PHP 和 HTML 文件,避免使用记事本,以防格式错误。
- 安全性:在使用
preg_replace等正则函数处理用户提交的内容时,要注意防范 XSS(跨站脚本)攻击,确保对输出内容进行适当的过滤。
希望这份详细的指南能帮助你成功修改 field.body!
