dede arclist如何获取正文内容?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 DEDE建站 正文
  1. 性能问题{dede:arclist} 是一个用于列表页的标签,它旨在快速获取文章的核心信息(标题、日期、摘要等),如果用它来获取完整的正文内容,需要对列表中的每一篇文章都去执行一次查询以获取 body 字段,这会极大地增加数据库的查询压力,导致页面加载速度非常慢,甚至可能导致服务器宕机。
  2. 内容冗余:列表页通常只显示文章摘要,而不是全文,显示全文会破坏页面布局,让用户失去点击进入详情页阅读的欲望。

正确的方法是获取摘要,而不是正文,但如果你的确有特殊需求,必须显示正文,这里会提供几种方法,并强烈推荐第一种(性能最优)。

dede arclist 获得正文内容
(图片来源网络,侵删)

最佳实践 - 使用 description 字段(获取摘要)

这是最推荐、最标准、性能最好的方法,在后台发布文章时,手动填写文章摘要,或者在文章内容中使用< dede:field name='description'/> 标签自动截取摘要。

在后台设置摘要 登录DedeCMS后台,在发布或编辑文章时,找到“或“内容简介”字段,手动填写一段文章的简介。

在模板中使用{dede:arclist} 标签中,使用 description 字段来调用你设置的摘要。

{dede:arclist typeid='1' titlelen='30' row='10'}
    <li>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
        <p class="summary">[field:description function='cn_substr(@me, 100)'/]</p> <!-- 使用函数截取100个字符 -->
        <span class="date">[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </li>
{/dede:arclist}

代码解释:

dede arclist 获得正文内容
(图片来源网络,侵删)
  • [field:description/]:直接调用文章摘要。
  • function='cn_substr(@me, 100)':这是一个非常实用的技巧。@me 代表当前字段的值(即摘要内容),cn_substr 是DedeCMS的截取字符串函数,这里的意思是“将摘要内容截取前100个字符”,可以防止摘要过长,破坏页面布局。

如果未设置摘要,自动截取正文(不推荐,有性能隐患)

如果你的文章没有填写摘要,但又想在列表页显示正文的前几行作为摘要,可以使用 body 字段,并用函数进行截取。

警告: 此方法会显著降低列表页的加载速度,请谨慎使用,尤其是在文章数量较多时。

{dede:arclist typeid='1' titlelen='30' row='10'}
    <li>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
        <p class="summary">[field:body function='cn_substr(Html2Text(@me), 100)'/]</p>
        <span class="date">[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </li>
{/dede:arclist}

代码解释:

  • [field:body/]:直接调用文章的body字段(即正文内容)。
  • function='cn_substr(Html2Text(@me), 100)':这里用到了两个关键函数,组合使用非常重要。
    • Html2Text(@me)@me是原始的HTML正文内容。Html2Text 函数会去除所有的HTML标签(如 <p>, <a>, <img> 等),只保留纯文本,这样可以防止HTML标签被截断导致页面错乱。
    • cn_substr(..., 100):在去除HTML标签后的纯文本基础上,再截取前100个字符。

使用自定义函数(更灵活,但需要修改文件)

如果你有更复杂的需求,比如想从正文中提取特定部分,或者需要更精细的摘要控制,可以创建一个自定义函数。

dede arclist 获得正文内容
(图片来源网络,侵删)

/include/extend.func.php 文件中添加自定义函数 打开这个文件,在末尾添加如下PHP代码:

// 自定义函数:从正文中提取摘要
function GetSummaryFromBody($body, $length = 200)
{
    // 1. 去除HTML标签
    $content = strip_tags($body);
    // 2. 去除多余的空白和换行
    $content = preg_replace('/\s+/', ' ', $content);
    // 3. 截取指定长度的字符串
    $summary = cn_substr($content, $length);
    return $summary;
}

在模板中调用自定义函数{dede:arclist} 中使用这个新函数。

{dede:arclist typeid='1' titlelen='30' row='10'}
    <li>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
        <p class="summary">[field:body function='GetSummaryFromBody(@me, 150)'/]</p> <!-- 调用自定义函数,截取150字符 -->
        <span class="date">[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </li>
{/dede:arclist}

总结与建议

方法 优点 缺点 推荐场景
description 字段 性能最佳、标准、高效 需要手动在后台填写摘要 99% 的情况,所有列表页都应该使用此方法。
body + Html2Text 无需手动填写摘要,自动生成 性能差,对数据库压力大 仅适用于少量文章、临时测试或特殊需求,生产环境应避免。
自定义函数 灵活性最高,可定制逻辑 需要修改PHP文件,有一定门槛 当摘要生成逻辑非常复杂,内置函数无法满足时使用。

最终建议:

始终优先使用方法一,养成良好的内容管理习惯,在发布文章时填写摘要,这是构建高性能、可维护网站的基础,只有在万不得已,且文章数量极少的情况下,才考虑使用方法二。

-- 展开阅读全文 --
头像
数据结构与算法分析C语言描述PDF哪里能找到?
« 上一篇 12-06
织梦dede loop能实现分页功能吗?
下一篇 » 12-06

相关文章

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

目录[+]