dede如何直接读取文章body内容?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文

下面我将从不同场景为你详细解释如何读取body


核心方法:使用 {dede:field.body/}

这是在DedeCMS模板中读取文章正文的最标准、最推荐的方法,它直接调用系统封装好的函数,能正确处理内容中的图片路径、分页符等。

基本用法

模板(通常是 /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)"/} &nbsp;|&nbsp;
        作者:{dede:field.writer/} &nbsp;|&nbsp;
        来源:{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> 等)。
  • 它会自动处理DedeCMS的分页符 <!--pagebreak-->,并生成分页链接。

在列表页(index.htm, list_*.htm)或首页中显示文章摘要(截取body内容)

在列表页或首页,我们通常不显示全文,而是显示一段摘要,这时我们需要从body字段中截取一部分内容。

方法1:使用 description 字段(推荐)

在后台发布文章时,可以在“或“简介”字段中手动填写摘要内容,模板中直接调用即可:

{dede:field.description runphp='yes'}
if(@me=='') @me = cn_substr(strip_tags(@me), 200); // 如果摘要为空,则自动截取
@me = '<p>'.@me.'</p>'; // 用p标签包裹
{/dede:field.description}

方法2:直接从 body 字段截取(不推荐,但可行)

如果不想手动填写摘要,可以直接从body中截取。注意:这种方法性能较差,因为它需要加载整个body内容再进行截取。

模板代码示例:

{dede:field.body function='html2text(@me)'/}
  • function='html2text(@me)':这是一个自定义函数。
    • html2text 是DedeCMS内置的一个函数,作用是移除所有HTML标签,只保留纯文本。
    • @me 代表当前字段的原始值(即body)。
    • 这个标签会输出一个纯文本的、没有格式的正文。

更完善的截取方案(结合cn_substr):

如果你希望在移除HTML标签后,再截取指定长度的字符,可以这样做:

{dede:field.body function='cn_substr(html2text(@me), 200)'/}
  • cn_substr 是DedeCMS的截取字符串函数。
  • cn_substr(html2text(@me), 200) 的意思是:先将body内容转换为纯文本,然后截取前200个字符。

在PHP代码中直接读取 body

如果你在自定义的PHP文件(比如一个自定义的插件页面)中需要获取文章的body,你可以通过DedeCMS的数据库查询来实现。

步骤:

  1. 引入DedeCMS的核心文件,以使用其数据库类和全局变量。
  2. 获取文章ID,通常是通过URL参数 aid
  3. 查询数据库,从 dede_addonarticle 表中获取 body 字段。

PHP代码示例:

<?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 ...") 用于非模板场景,如开发插件或自定义功能页面。

希望这份详细的解释能帮助你完全掌握在DedeCMS中读取body内容的方法!

-- 展开阅读全文 --
头像
dede分页为何出错?
« 上一篇 前天
数据结构C语言版笔记如何高效掌握核心要点?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码