$body 是织梦模板系统中的一个核心变量,它的含义是主体”,根据它所在模板文件的不同,$body 所代表的具体内容也完全不同。

$body 在 PC端模板 中的含义
在PC端的模板文件中(/templets/default/article_article.htm),$body 通常指的是文章或栏目内容的完整HTML代码。
来源:
这个 $body 变量是由PHP后端程序在读取数据库中的 body 字段后,经过处理(如过滤、转换等)最终传递给模板引擎的。
作用:
在PC端模板中,$body 的主要任务就是完整地、忠实地显示文章内容。
示例(PC端文章详情页 article_article.htm):

{dede:include filename="head.htm"/}
<div class="main">
<h1>{dede:field.title/}</h1>
<div class="info">
<span>作者:{dede:field.author/}</span> |
<span>时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</span> |
<span>来源:{dede:field.source/}</span>
</div>
<div class="content">
<!-- 这里的 $body 就是文章的全部正文内容 -->
{dede:field.body/}
</div>
<!-- ... 其他内容 ... -->
</div>
{dede:include filename="foot.htm"/}
在这个例子中,{dede:field.body/} 标签就等同于 $body 变量,它会输出文章在后台编辑器里输入的所有文字、图片、表格、视频等。
$body 在 手机端模板 中的含义
在织梦手机版模板中,$body 的含义变得非常关键,因为它直接决定了的展示形式。
织梦手机版通常有两种实现方式,$body 的处理方式也因此不同:
简单自适应模板(不推荐)
这种方式下,手机端和PC端使用的是同一套模板,通过CSS媒体查询(@media)来调整布局。
$body的含义: 和PC端一样,它仍然是文章的完整HTML代码。- 问题: 这种方式的体验很差,因为PC端编辑器插入的图片、表格、代码等,在手机端的小屏幕上会变得一团糟,需要用户左右滑动,阅读体验极差。
独立的手机模板(推荐)
这是目前主流且正确的做法,为手机端创建一套独立的模板文件(/templets/default/wap/article_article.htm),并且通过后台设置,让移动设备访问时自动调用这套模板。
在这种模式下,$body 的含义和使用方式发生了根本性的变化:
A. 直接使用 {dede:field.body/}(不推荐)
如果你直接在手机端模板里使用 {dede:field.body/},那么它输出的依然是PC端编辑的完整内容,这会导致所有问题(图片过大、布局错乱等)。在手机端模板中,应尽量避免直接使用 {dede:field.body/}。
B. 使用 {dede:field.body/} 的函数修饰(核心用法)
自适应问题,织梦为 {dede:field.body/} 提供了强大的修饰功能,通过 function 参数来对 $body 进行处理,使其适合手机端显示。
最常用、最重要的修饰函数是 htmlspecialchars_decode。
htmlspecialchars_decode 的作用:
这个函数的作用是将HTML实体转换回HTML标签,为什么需要这个?
因为织梦在保存文章内容到数据库时,为了安全和防止注入,会自动将 <, >, &, , 等字符转换成HTML实体(如 <, >),这样直接输出到模板上,用户看到的就是一堆代码,而不是渲染后的效果。
htmlspecialchars_decode 就是为了“解码”这些实体,让HTML标签(如 <img>, <p>, <div>)能够正常生效。
示例(手机端文章详情页 wap/article_article.htm):
{dede:include filename="head_wap.htm"/}
<div class="main">
<h1>{dede:field.title/}</h1>
<div class="info">
<span>作者:{dede:field.author/}</span> |
<span>时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</span>
</div>
<div class="content">
<!--
这里是关键!
1. {dede:field.body/} 获取原始的、经过HTML实体编码的 $body 内容。
2. function="htmlspecialchars_decode" 将这些编码解码,让标签生效。
3. 通常还会加上 'text-align:left' 来确保文字左对齐,符合手机阅读习惯。
-->
{dede:field.body function='htmlspecialchars_decode(@me)'/}
</div>
<!-- ... 其他内容 ... -->
</div>
{dede:include filename="foot_wap.htm"/}
C. 使用 {dede:field.body/} 的图片自适应修饰(高级用法)
仅仅解码还不够,文章中的图片通常尺寸很大,会超出手机屏幕,我们可以使用更复杂的函数来处理图片。
示例:自动为文章中的所有图片添加 max-width: 100% 和 height: auto 样式,使其自适应屏幕宽度。
<div class="content">
{dede:field.body
function='htmlspecialchars_decode(@me)'
runphp='yes'
}
$str = @me;
// 使用正则表达式,找到所有img标签
$pattern = "/<img(.*?)src=['\"](.*?)['\"](.*?)>/i";
$replacement = '<img$1 src="$2" style="max-width:100%;height:auto;"$3>';
@me = preg_replace($pattern, $replacement, $str);
{/dede:field.body}
</div>
这段代码通过 runphp='yes' 启用了PHP代码执行,然后用正则表达式找到所有<img>标签,并在其中动态添加 style="max-width:100%;height:auto;" 属性,从而实现图片的自适应。
| 模板类型 | $body 的含义 |
常用标签和修饰 | 目的 |
|---|---|---|---|
| PC端模板 | 文章的完整HTML内容 | {dede:field.body/} |
原样显示文章内容,适合PC大屏浏览。 |
| 手机端模板 (简单自适应) | 文章的完整HTML内容 | {dede:field.body/} |
不推荐,会导致布局错乱,体验差。 |
| 手机端模板 (独立模板) | 经过修饰后的、适合手机显示的HTML内容 | {dede:field.body function='htmlspecialchars_decode(@me)'} |
核心用法,解码HTML实体,让内容正常渲染,并配合CSS或PHP函数实现图片、布局的自适应,提供良好的移动端阅读体验。 |
在制作织梦手机版时,你需要忘记PC端 $body 的概念,在手机端模板中,$body(通过 {dede:field.body/} 调用)是一个需要被“加工”的原始数据,你必须使用 htmlspecialchars_decode 等函数对其进行处理,才能得到正确、美观、适合手机浏览的内容。
