dede arclist如何调用body内容?

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

这是一个非常常见的需求,但直接调用 body 会带来一些性能和显示上的问题,因此了解其正确用法和替代方案非常重要。

dede arclist 调用body
(图片来源网络,侵删)

直接调用 Body 的方法 (不推荐)

最直接的方法是使用 body 字段,在 {dede:arclist} 标签内,你可以通过 [field:body/] 来获取文章的正文内容。

示例代码:

{dede:arclist row='5' titlelen='30'}
  <li>
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <!-- 直接调用 body -->
    <div>[field:body/]</div>
  </li>
{/dede:arclist}

⚠️ 重要警告:为什么强烈不推荐直接使用 [field:body/]

  1. 性能极差{dede:arclist} 的主要作用是快速列出文章的摘要(标题、图片、简介等),它的底层查询是优化的,而 body 字段通常非常大(包含大量HTML和文本),直接调用会导致每次查询都要读取和传输完整的长文本,这会急剧增加数据库和服务器的负载,尤其是在列表页有大量文章时,网站会变得非常卡顿。
  2. 样式混乱body 字段中包含了完整的文章格式(如 <p><img><h2> 等HTML标签),直接输出到列表页,会破坏列表页的整体布局和样式,导致页面排版错乱。
  3. 内容过长:文章的正文通常很长,直接显示在列表中会使得页面非常冗长,用户体验极差。

推荐的最佳实践:使用描述 (description) 字段

这是最常用也是最规范的方法,在后台发布文章时,手动填写“文章描述”或“内容简介”字段,然后在列表页调用这个字段。

dede arclist 调用body
(图片来源网络,侵删)

操作步骤:

  1. 在后台填写描述

    • 登录 DedeCMS 后台。
    • 进入“[核心]-[内容模型管理]”,选择你的文章模型(默认是“文章”)。
    • 点击“字段管理”,确保有一个名为 description 的字段,后台增加内容表单”中是勾选显示的。
    • 发布或编辑文章时,在“文章内容”编辑框下方,通常会有一个“文章简介”或“内容简介”的输入框,务必在这里填写文章的摘要会保存到 description 字段。
  2. 在模板中调用 description

    {dede:arclist row='5' titlelen='30'}
      <li>
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
        <!-- 调用文章描述/简介 -->
        <div>[field:description function='cn_substr(@me, 100)'/]</div> <!-- 截取前100个字符 -->
      </li>
    {dede:arclist}

优点:

dede arclist 调用body
(图片来源网络,侵删)
  • 性能优秀description 字段是专门为摘要设计的,长度适中,查询速度快。
  • 控制灵活:你可以通过 function='cn_substr(@me, 100)' 这样的方式轻松控制摘要的显示长度。
  • 样式整洁通常是纯文本或简单的格式,便于在列表页进行CSS样式控制。

如果非要自动截取 Body 内容怎么办?

如果你没有在后台填写 description,又希望从 body 中自动截取一部分作为摘要,可以使用 function 属性结合 strip_tagscn_substr 函数来实现。

核心思路:

  1. strip_tags:去除 body 中的所有 HTML 标签,只保留纯文本。
  2. cn_substr:从纯文本中截取指定长度的字符串。

示例代码:

{dede:arclist row='5' titlelen='30'}
  <li>
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <!-- 
      1. @me 表示当前字段的原始值,即 [field:body/] 的内容
      2. strip_tags(@me) 去掉所有HTML标签
      3. cn_substr(...) 截取前150个字符
    -->
    <div>[field:body function='cn_substr(strip_tags(@me), 150)'/]...</div>
  </li>
{/dede:arclist}

代码解析:

  • [field:body ...]:指定要操作的字段是 body
  • function='...':对字段值进行函数处理。
  • strip_tags(@me)strip_tags 是 PHP 的内置函数,作用是删除字符串中的 HTML 和 PHP 标签。@me 是 DedeCMS 模板中的特殊变量,代表当前标签的原始值。
  • cn_substr(..., 150)cn_substr 是 DedeCMS 的函数,用于安全地截取中文字符串,避免出现乱码,这里我们截取去除标签后的前 150 个字符。
  • 在截取的文本末尾手动加上省略号,表示内容未完。

注意:这种方法虽然可行,但依然比直接调用 description 要慢,因为它需要对每篇文章的 body 内容进行 PHP 字符串处理。它只是一个备选方案,最佳方案仍然是使用 description 字段。


高级用法:调用自定义字段 (自定义字段)

如果你的文章模型中添加了自定义的字段来存储摘要(myintro),调用方式也非常简单。

假设你添加了一个名为 myintro 的自定义文本字段。

在模板中调用:

{dede:arclist row='5' titlelen='30'}
  <li>
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <!-- 调用自定义字段 myintro -->
    <div>[field:myintro/]</div>
  </li>
{/dede:arclist}
方法 代码示例 优点 缺点 推荐度
直接调用 Body [field:body/] - 性能极差、样式混乱、内容过长 ⭐ (不推荐)
调用描述字段 [field:description/] 性能好、控制灵活、样式整洁 需要手动在后台填写 ⭐⭐⭐⭐⭐ (强烈推荐)
自动截取 Body [field:body function='cn_substr(strip_tags(@me), 150)'/] 无需手动填写,自动生成摘要 性能不如 description,仍有额外开销 ⭐⭐⭐ (备选方案)
调用自定义字段 [field:myintro/] 灵活,可扩展性强 需要先在后台添加和配置字段 ⭐⭐⭐⭐ (特定场景推荐)

最终建议: 养成在发布文章时填写“文章简介”(description 字段)的好习惯,这是最高效、最规范的 DedeCMS 列表页内容调用方式。

-- 展开阅读全文 --
头像
织梦productimagelist如何调用图片列表?
« 上一篇 12-07
C语言中1 1 2 1 2 3 100有何特殊含义?
下一篇 » 12-07

相关文章

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

目录[+]