织梦列表页调用文章内容

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

原因在于性能和效率:列表页通常会展示很多篇文章,如果每篇文章都把完整的正文内容都查询出来,会极大地增加数据库负担,导致页面加载缓慢。

织梦列表页调用文章内容
(图片来源网络,侵删)

我们需要使用一些技巧来实现这个功能,下面我将为您介绍几种最常用和最有效的方法,从推荐到备选排序。


使用 descriptionkeywords 字段(最推荐)

这是最简单、最规范、性能最好的方法,我们利用文章摘要(description)或关键词(keywords)字段来存储一小段内容。

操作步骤:

  1. 修改文章发布/编辑模板

    织梦列表页调用文章内容
    (图片来源网络,侵删)
    • 登录织梦后台,进入【模板】->【默认模板管理】。
    • 找到并编辑文章内容页的模板文件,通常是 article_article.htm
    • 在这个模板里,找到调用文章正文 {dede:field.body/} 的地方。
    • 在它前面后面,添加一个隐藏的文本区域,用于将文章内容的一部分同步到 description 字段。
    <!-- 在 article_article.htm 模板中添加这段代码 -->
    <script type="text/javascript">
        // 获取文章正文内容
        var content = document.getElementById('article-content').innerText;
        // 截取前200个字符作为摘要
        var summary = content.substring(0, 200);
        // 将摘要设置到 description 字段
        document.getElementById('description').value = summary;
    </script>
    <!-- 原有的正文内容保持不变 -->
    <div id="article-content">
        {dede:field.body/}
    </div>
    <!-- 添加一个隐藏的 input,用于在表单提交时传递新的摘要值 -->
    <input type="hidden" name="description" id="description" value="{dede:field.description function='html2text(@me)'/}">
    • 注意:上面的代码只是一个示例,更健壮的做法是修改后台的 article_add.phparticle_edit.php 文件,在保存文章时,用PHP代码自动截取 body 字段的内容来填充 description 字段,这需要一定的PHP开发知识。
  2. 在列表页模板中调用

    • 进入【模板】->【默认模板管理】,编辑你的列表页模板文件,通常是 list_article.htm
    • 在你希望显示内容的位置,使用下面的标签来调用 description 字段。
    <ul>
      {dede:list pagesize='10'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用文章摘要,也就是我们同步过来的内容 -->
        <p>[field:description function='cn_substr(@me, 100)'/]...</p>
      </li>
      {/dede:list}
    </ul>

优点:

  • 性能最佳:没有额外的数据库查询。
  • 非常规范description 字段本就用于描述文章内容。
  • SEO友好:列表页展示的内容摘要有助于搜索引擎理解页面。

使用自定义字段(最灵活)

description 字段已经被其他用途占用,或者你需要调用更长/更特定的内容,可以使用自定义字段。

操作步骤:

  1. 添加自定义字段

    • 在后台【核心】->【内容模型管理】中,点击你使用的模型(文章”模型)进行管理。
    • 进入字段管理,点击“添加新字段”。
    • 字段名:listcontent (建议用英文,不能和系统保留字段冲突)
    • 字段类型:文本区域 (TEXTAREA)
    • 其他信息按需填写,然后保存。
  2. 在后台手动填写或自动填充

    • 手动:每次发布文章时,在“自定义字段”区域找到 listcontent 字段,手动填写你希望在列表页显示的内容。
    • 自动(推荐):同样,可以通过修改 article_add.php 等文件,在保存文章时自动将 body 字段的内容截取后存入 listcontent 字段。
  3. 在列表页模板中调用

    • 编辑 list_article.htm 模板。
    • 使用 {dede:field.listcontent/} 来调用你刚刚创建的自定义字段。
    <ul>
      {dede:list pagesize='10'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用自定义字段的内容 -->
        <p>[field:listcontent function='cn_substr(@me, 150)'/]...</p>
      </li>
      {/dede:list}
    </ul>

优点:

  • 非常灵活:可以创建多个不同用途的自定义字段。
  • 不影响系统原有字段。

使用SQL直接查询(不推荐,性能差)

这种方法可以直接在列表页标签里写SQL语句来获取内容,但强烈不推荐在列表页使用,尤其是在文章数量多的时候。

操作步骤:

  1. 在列表页模板中使用 arclist 标签的 sql 属性

    • 编辑 list_article.htm 模板。
    • 使用 {dede:arclist} 标签,并指定 sql 属性来直接查询 dede_addonarticle 表(默认文章附加表)的 body 字段。
    <ul>
      {dede:arclist sql='SELECT id,title,body FROM dede_addonarticle ORDER BY id DESC' row='10'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 直接调用 body 字段,并截取 -->
        <p>[field:body function='htmlspecialchars(cn_substr(@me, 100))'/]...</p>
      </li>
      {/dede:arclist}
    </ul>

缺点:

  • 性能极差arclist 本身就执行了一次查询,再嵌套一个复杂的 sql 查询,会为列表页的每一篇文章都执行一次数据库查询,当列表有10篇文章时,就会执行11次查询(1次获取列表+10次获取内容),服务器压力巨大。
  • 不灵活:如果修改了文章模型(比如附加表名),代码就会失效。
  • 标签功能受限:很多 arclist 的内置属性在这种用法下可能无法正常工作。

总结与建议

方法 优点 缺点 推荐度
方法一 (description) 性能最好、最规范、SEO友好 需要修改后台或模板以同步内容 ⭐⭐⭐⭐⭐ (强烈推荐)
方法二 (自定义字段) 非常灵活、不影响系统字段 同样需要后台同步内容,增加一个字段 ⭐⭐⭐⭐ (次推荐)
方法三 (直接SQL) 实现直接,无需修改后台 性能极差、不灵活、维护困难 (不推荐,仅限极特殊场景)

最终建议:

对于绝大多数情况,请优先选择方法一(使用 description 字段),这是最符合织梦设计理念且最稳定高效的方式,如果你愿意花一点时间修改后台PHP文件实现自动同步,那么体验会完美,如果不想动PHP代码,手动在发布文章时复制一小段内容到摘要字段也是可行的。

-- 展开阅读全文 --
头像
织梦cms如何搭建网站
« 上一篇 01-08
织梦添加友情链接的标签
下一篇 » 01-08

相关文章

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

目录[+]