下面我将从不同场景为你详细解释如何读取 这是在DedeCMS模板中读取文章正文的最标准、最推荐的方法,它直接调用系统封装好的函数,能正确处理内容中的图片路径、分页符等。 模板(通常是 这个标签会输出当前文章的完整正文内容。 这是最常见的用法,当用户点击一篇文章进入详情页时,你需要显示完整的正文。 模板代码示例 ( 说明: 在列表页或首页,我们通常不显示全文,而是显示一段摘要,这时我们需要从 方法1:使用 在后台发布文章时,可以在“或“简介”字段中手动填写摘要内容,模板中直接调用即可: 方法2:直接从 如果不想手动填写摘要,可以直接从 模板代码示例: 更完善的截取方案(结合 如果你希望在移除HTML标签后,再截取指定长度的字符,可以这样做: 如果你在自定义的PHP文件(比如一个自定义的插件页面)中需要获取文章的 步骤: PHP代码示例: 代码解释: 希望这份详细的解释能帮助你完全掌握在DedeCMS中读取body
核心方法:使用
{dede:field.body/}
基本用法
/templets/default/article_article.htm)中,直接使用以下标签:{dede:field.body/}
不同场景下的详细说明
在文章详情页(article_article.htm)中显示全文
article_article.htm):<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
</head>
<body>
<h1>{dede:field.title/}</h1>
<div class="info">
发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/} |
作者:{dede:field.writer/} |
来源:{dede:field.source/}
</div>
<hr>
<!-- 这里就是文章正文内容 -->
<div class="content">
{dede:field.body/}
</div>
<hr>
<!-- 上一篇/下一篇 -->
<div class="prenext">
<ul>
<li>{dede:prenext get='pre'/}</li>
<li>{dede:prenext get='next'/}</li>
</ul>
</div>
</body>
</html>
{dede:field.body/} 会原样输出文章正文,包括所有HTML标签(如 <p>, <img>, <h2> 等)。<!--pagebreak-->,并生成分页链接。
在列表页(index.htm, list_*.htm)或首页中显示文章摘要(截取body内容)
body字段中截取一部分内容。description 字段(推荐){dede:field.description runphp='yes'}
if(@me=='') @me = cn_substr(strip_tags(@me), 200); // 如果摘要为空,则自动截取
@me = '<p>'.@me.'</p>'; // 用p标签包裹
{/dede:field.description}
body 字段截取(不推荐,但可行)body中截取。注意:这种方法性能较差,因为它需要加载整个body内容再进行截取。{dede:field.body function='html2text(@me)'/}
function='html2text(@me)':这是一个自定义函数。
html2text 是DedeCMS内置的一个函数,作用是移除所有HTML标签,只保留纯文本。@me 代表当前字段的原始值(即body)。cn_substr):{dede:field.body function='cn_substr(html2text(@me), 200)'/}
cn_substr 是DedeCMS的截取字符串函数。cn_substr(html2text(@me), 200) 的意思是:先将body内容转换为纯文本,然后截取前200个字符。
在PHP代码中直接读取
body
body,你可以通过DedeCMS的数据库查询来实现。
aid。dede_addonarticle 表中获取 body 字段。<?php
// 1. 引入核心文件(根据你的实际路径调整)
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 2. 获取文章ID,并做安全处理
$aid = isset($aid) && is_numeric($aid) ? intval($aid) : 0;
if ($aid > 0) {
// 3. 查询数据库
// $dsql->GetOne() 用于获取单条记录
$row = $dsql->GetOne("SELECT body FROM `#@__addonarticle` WHERE aid = '{$aid}'");
if (is_array($row)) {
// 4. 输出或处理 body 内容
// $row['body'] 就是我们需要的正文内容
echo "<h1>文章ID: {$aid}</h1>";
echo "<div>" . $row['body'] . "</div>";
} else {
echo "文章不存在或已被删除。";
}
} else {
echo "无效的文章ID。";
}
?>
require_once (dirname(__FILE__) . "/include/common.inc.php");:这行代码是关键,它引入了DedeCMS的环境,让你可以使用 $dsql 数据库对象。$aid = isset($aid) ? intval($aid) : 0;:从 $_GET 或 $_POST 中获取 aid 参数,并用 intval() 转换为整数,防止SQL注入。$dsql->GetOne(...):执行SQL查询,#@__ 是DedeCMS的数据表前缀(如 dede_)的占位符,系统会自动替换。is_array($row):判断查询是否成功,如果返回的是一个数组,说明找到了记录。$row['body']:通过键名 body 获取正文内容。
总结与最佳实践
场景
推荐方法
说明
文章详情页
{dede:field.body/}标准用法,功能最全,能正确处理分页、图片路径等。
列表页/首页摘要
手动填写
{dede:field.description/}最佳实践,性能好,内容可控。
列表页/首页摘要
{dede:field.body function='cn_substr(html2text(@me), 200)'/}备选方案,适合自动化,但性能稍差,且会丢失格式。
PHP文件中读取
$dsql->GetOne("SELECT body FROM ...")用于非模板场景,如开发插件或自定义功能页面。
body内容的方法!
dede如何直接读取文章body内容?
-- 展开阅读全文 --
