dede列表页如何调用body内容?

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

使用 arc.listview.class.php 文件(推荐,最常用)

这是最标准、最推荐的方法,通过修改核心文件,可以在列表页循环中像调用普通字段一样调用body,它的优点是效率高,因为它是在数据库查询阶段就截取好内容,而不是在PHP循环中再用函数处理。

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

适用场景:对性能有一定要求,且愿意修改核心文件的用户。

操作步骤

  1. 找到并修改核心文件

    • 打开你的网站根目录。
    • 进入 /include/ 文件夹。
    • 找到并编辑 arc.listview.class.php 文件。
  2. 定位代码

    dede列表页调用body
    (图片来源网络,侵删)
    • arc.listview.class.php 文件中,使用 Ctrl + F 搜索 GetArcList 函数,找到大约在第 590行 左右的代码段,它看起来像这样:
      // //处理每个字段的内容
      // $this->Fields[$j] = $this->Fields;
    • 将这两行代码注释掉(在前面加 ),然后在下面添加新的代码。
  3. 添加截取body的代码

    • 将下面的代码粘贴到被注释掉的代码位置:
      // 处理每个字段的内容
      // $this->Fields[$j] = $this->Fields;

    // 新增:截取body内容并添加到自定义字段中 $this->Fields['body'] = $this->Fields['body']; // 获取body原始内容 $this->Fields['body'] = cn_substr_html($this->Fields['body'], $this->TotalResult); // 使用cn_substr_html函数截取

    
    **代码解释**:
    *   `$this->Fields['body'] = $this->Fields['body'];`:将`body`字段的原始内容赋值给一个自定义字段`body`。
    *   `cn_substr_html(...)`:这是DedeCMS自带的、非常强大的截取函数,它可以智能地处理HTML标签,确保截断后不会破坏标签结构。
    *   `$this->TotalResult`:这里我们直接使用列表的总记录数作为截取长度。**这是一个不推荐的写法**,因为列表的总记录数可能非常大,导致截取过长,你应该用一个具体的数字,`200`,来限制摘要长度。
    **修正后的代码(推荐)**:
    ```php
    // 处理每个字段的内容
    // $this->Fields[$j] = $this->Fields;
    // 新增:截取body内容并添加到自定义字段中
    $this->Fields['body'] = $this->Fields['body']; // 获取body原始内容
    // 使用cn_substr_html函数截取,限制长度为200个字符
    $this->Fields['body'] = cn_substr_html($this->Fields['body'], 200); 
  4. 在列表页模板中调用

    • 你可以在你的列表页模板文件(通常是 /templets/default/list_栏目ID.htm)中直接调用 {dede:field.body/} 了。
    • 示例
      <ul>
      {dede:list pagesize='10'}
      <li>
      <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
      <div class="summary">
        [field:body/]
      </div>
      <span class="time">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
      </li>
      {/dede:list}
      </ul>

使用自定义函数(灵活,不修改核心文件)

如果你不想修改核心文件,可以使用DedeCMS的自定义函数功能来实现,这种方法更灵活,且不会因为升级DedeCMS而丢失修改。

适用场景:不想修改核心文件,或者需要在多个不同场景下使用不同截取规则的用户。

操作步骤

  1. 创建自定义函数文件

    • 在你的网站根目录下创建一个名为 userfunc.php 的文件(如果已存在则无需新建)。
  2. 编写截取函数

    • userfunc.php 文件中,添加以下PHP函数:
      <?php
      // 函数名可以自定义,getBodySummary
      function getBodySummary($body, $len = 200)
      {
      // 使用DedeCMS自带的cn_substr_html函数进行安全截取
      return cn_substr_html($body, $len);
      }
      ?>
  3. 在列表页模板中调用

    • 在你的列表页模板文件中,使用 {dede:field.body function='getBodySummary(@me, 150)'/} 的方式来调用。
    • 示例
      <ul>
      {dede:list pagesize='10'}
      <li>
      <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
      <div class="summary">
        {dede:field.body function='getBodySummary(@me, 150)'/}
      </div>
      <span class="time">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
      </li>
      {/dede:list}
      </ul>

      代码解释

    • function='getBodySummary(@me, 150)':这里调用了我们刚刚在 userfunc.php 中定义的 getBodySummary 函数。
    • @me:这是DedeCMS模板引擎的固定用法,代表当前字段的原始值,也就是body
    • 150:这是传递给函数的第二个参数,表示截取的长度为150个字符,你可以根据需要调整这个值。

使用 description 字段(最简单,推荐)

如果你的列表页只需要显示文章的摘要,那么最好的做法是在发布文章时就填写好摘要,然后调用description字段,这是DedeCMS设计的标准做法,性能最优。

适用场景:只需要显示简短摘要,不涉及从正文中截取。

操作步骤

  1. 在后台填写摘要

    在DedeCMS后台发布或编辑文章时,在“栏目填写你想要的摘要内容。

  2. 在列表页模板中调用

    • 直接在模板中使用 {dede:field.description/} 即可。
    • 示例
      <ul>
      {dede:list pagesize='10'}
      <li>
      <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
      <div class="summary">
        [field:description/]
      </div>
      <span class="time">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
      </li>
      {/dede:list}
      </ul>

      如果摘要为空,可以显示“暂无摘要”:

      [field:description function='(@me=="" ? "暂无摘要" : @me)'/]

总结与建议

方法 优点 缺点 推荐度
修改arc.listview.class.php 性能最高,直接在数据库查询层面处理。 需要修改核心文件,升级DedeCMS后可能需要重新修改。 ⭐⭐⭐⭐⭐ (对性能要求高时)
自定义函数 灵活,不修改核心文件,可复用。 性能略低于方法一,因为是在PHP循环中处理。 ⭐⭐⭐⭐ (最通用、最推荐的方法)
调用description 最简单、最标准,性能最好。 需要手动维护摘要内容,无法自动截取正文。 ⭐⭐⭐⭐⭐ (作为最佳实践)

最终建议

  • 最佳实践:在后台文章编辑页面,手动填写 description 摘要,这是最符合DedeCMS设计理念、最稳定、最高效的方式。
  • 如果必须自动截取优先使用方法二(自定义函数),因为它既灵活又安全,不会因为升级导致问题。
  • 如果对性能有极致要求,且不介意修改核心文件:可以使用方法一
-- 展开阅读全文 --
头像
织梦后台为何不显示文章列表?
« 上一篇 今天
如何在Windows下用C语言实现串口通信?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]