织梦列表页如何直接调用body内容?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 织梦建站 正文

直接调用body字段会返回文章的全部内容,这通常会导致列表页非常臃肿、加载速度变慢,并且影响用户体验。

织梦列表页调用body
(图片来源网络,侵删)

下面我将为你提供几种常用的方法,从最简单到最推荐,并解释其优缺点。


直接调用(不推荐)

这是最直接的方法,但正如前面所说,强烈不推荐在生产环境中使用,仅用于测试。

在列表页模板文件 list_article.htm 中,使用 {dede:field.body/}

示例代码:

{dede:list pagesize='10'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</p>
    <!-- 直接调用body,会显示文章全部内容 -->
    <div class="content">
        [field:body/]
    </div>
    <hr />
{/dede:list}

缺点:

织梦列表页调用body
(图片来源网络,侵删)
  1. 性能极差:列表页会一次性加载所有文章的完整内容,导致页面体积巨大,服务器和浏览器压力都很大。
  2. 用户体验差:用户打开列表页需要滚动很久才能看到下一篇文章的标题,非常不便。
  3. SEO影响:列表页充满了大量重复和无关的内容,不利于搜索引擎抓取和排名。

调用文章摘要(推荐方法)

这是最标准、最推荐的方法,在发布文章时,手动填写“(description字段),或者在后台设置“自动提取摘要”。

步骤:

  1. 后台设置:进入“系统” -> “系统基本参数” -> “核心设置”,找到“列表每页默认显示条数”和“自动摘要长度”等选项,根据需要调整。
  2. 发布文章时填写摘要:在后台发布或编辑文章时,务必在“文本框中填写一段精炼的介绍。
  3. 模板调用:在列表页模板中使用 {dede:field.description/}

示例代码:

{dede:list pagesize='10'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</p>
    <!-- 调用文章摘要,这是最佳实践 -->
    <div class="summary">
        [field:description function='cn_substr(@me, 200)'/]...
    </div>
    <hr />
{/dede:list}

代码解释:

织梦列表页调用body
(图片来源网络,侵删)
  • [field:description/]:调用文章摘要。
  • function='cn_substr(@me, 200)':这是一个自定义函数,cn_substr 是织梦自带的截取字符串函数。@me 代表当前字段的值(即摘要内容),200 是截取的字符数,这样即使后台没有填写摘要,也不会显示错误,并且可以控制摘要长度。

优点:

  1. 性能优秀:只调用简短的摘要,页面加载速度快。
  2. 用户体验好:列表页清爽,用户可以快速浏览文章概要。
  3. SEO友好:列表页内容精炼,主题突出。

手动截取 body 内容(备选方法)

如果因为某些原因(比如历史数据没有摘要)你必须在列表页显示 body 的部分内容,可以手动截取 body 的前 N 个字符。

方法: 使用 cn_substr 函数来截取 body 字段。

示例代码:

{dede:list pagesize='10'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</p>
    <!-- 手动截取body内容的前200个字符作为摘要 -->
    <div class="content-summary">
        [field:body function='cn_html2text(@me)'/]...
    </div>
    <hr />
{/dede:list}

代码解释:

  • [field:body function='cn_html2text(@me)'/]
    • @me:代表 body 字段的全部内容。
    • cn_html2text():这是一个非常实用的织梦函数,它会将HTML标签(如 <p>, <img>, <a> 等)全部去除,只保留纯文本,这样可以避免在列表页显示杂乱的HTML代码。
    • cn_substr():在 cn_html2text 外层再套一个 cn_substr,用于控制最终显示的字符数。

改进版(先转文本再截取):

{dede:list pagesize='10'}
    ...
    <div class="content-summary">
        <!-- 先去除HTML标签,再截取前200个字符 -->
        [field:body function='cn_substr(cn_html2text(@me), 200)'/]...
    </div>
    ...
{/dede:list}

优点:

  • 可以在没有摘要的情况下,显示内容的前面部分。
  • 使用 cn_html2text 避免了HTML格式错乱。

缺点:

  • 性能仍然比调用摘要差:因为需要处理每篇文章的完整 body 内容,只是处理方式不同。
  • 摘要不准确:截取的开头可能不是文章最精华的部分,手动编写的摘要质量更高。

总结与建议

方法 调用标签 优点 缺点 推荐度
直接调用 [field:body/] 实现简单 性能极差、体验差、SEO差 ☆☆☆☆☆ (不推荐)
调用摘要 [field:description/] 性能好、体验佳、SEO优 需要手动填写摘要 ★★★★★ (强烈推荐)
截取Body [field:body function='...'] 灵活,可处理无摘要文章 性能一般,摘要质量不高 ★★★☆☆ (备选方案)

最终建议:

  1. 新站建设:请务必使用 方法二(调用摘要),这是最佳实践,从源头上解决问题。
  2. 旧站改造
    • 如果时间允许,为所有历史文章补充摘要,然后采用方法二
    • 如果时间紧张,可以临时使用方法三(截取Body)作为过渡方案,但应计划在未来逐步替换为摘要。

希望这个详细的解释能帮助你解决问题!

-- 展开阅读全文 --
头像
页分页样式如何自定义?
« 上一篇 02-09
dede自定义表单如何实现数据关联?
下一篇 » 02-09
取消
微信二维码
支付宝二维码