dede文章列表如何自定义排序规则?

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

后台直接设置(最简单,适用于列表页)

这是最直接的方法,适用于在栏目列表页(如 list.php)上进行排序,无需修改代码。

dede文章列表排序
(图片来源网络,侵删)
  1. 登录DedeCMS后台
  2. 进入「栏目管理」。
  3. 找到你想要修改排序的栏目,点击「修改」。
  4. 在栏目编辑页面,找到「列表选项」这一栏。
  5. 在「排序方式」的下拉菜单中,选择你想要的排序方式:
    • 默认:按文章发布时间倒序。
    • 置顶:将有“置顶”属性的文章排在前面。
    • 只看头条:只显示头条文章。
    • 按ID降序:按文章ID从大到小排序(新发布的文章ID更大,所以效果和默认类似)。
    • 按ID升序:按文章ID从小到大排序(旧文章排在前面)。
    • 按评论数:按文章的评论数量排序。
    • 按点击数:按文章的点击(浏览)数量排序。
    • 按评分:按文章的评分排序。

优点

  • 操作简单,无需代码。
  • 设置即时生效。

缺点

  • 只能使用DedeCMS预设的几种排序方式。
  • 每个栏目需要单独设置。

修改模板文件(最灵活,适用于自定义排序)

如果你需要使用更复杂的排序方式,或者希望在特定页面(如首页、自定义页面)实现排序,就需要修改模板文件。

核心原理:在调用文章列表的 {dede:list}{dede:arclist} 标签中,使用 orderbyorderway 属性来指定排序字段和排序方向。

dede文章列表排序
(图片来源网络,侵删)

使用 {dede:list} 标签(用于栏目列表页)

{dede:list} 通常用在 list_article.htm 模板文件中。

语法

{dede:list pagesize='10' orderby='排序字段' orderway='排序方向'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:list}

参数说明

  • orderby: 指定按哪个字段排序。
    • sortrank (默认): 按文章排序级别(后台“高级选项”里的“排序级别”),通常等同于发布时间。
    • id: 按文章ID。
    • click: 按点击量。
    • postnum: 按评论数。
    • rand: 随机排序(非常常用)。
    • hot: 按热度(综合点击、评论等)。
    • scores: 按评分。
    • pubdate: 按发布时间。
    • lastpost: 按最后评论时间。
  • orderway: 排序方向。
    • desc (默认): 降序(从大到小,时间上是从新到旧)。
    • asc: 升序(从小到大,时间上是从旧到新)。

示例

dede文章列表排序
(图片来源网络,侵删)
  • 按点击量从高到低排序(热门文章)

    {dede:list orderby='click' orderway='desc' pagesize='10'}
    ...
    {/dede:list}
  • 升序排列(A-Z)

    • 注意orderby 默认不支持 title 字段,你需要修改 include/arc.listview.class.php 文件,找到大约第780行的 arr = array('sortrank', 'id', 'click', 'postnum', 'lastpost');,将 'title' 加入数组中。
      {dede:list orderby='title' orderway='asc' pagesize='10'}
      ...
      {/dede:list}

使用 {dede:arclist} 标签(更通用,可用于首页、自定义页面等)

{dede:arclist} 功能更强大,适用范围更广。

语法

{dede:arclist typeid='栏目ID' orderby='排序字段' orderway='排序方向' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

参数说明

  • typeid: 指定调用的栏目ID。typeid='0' 表示调用所有栏目的内容。
  • orderbyorderway: 与 {dede:list} 完全相同。

示例

  • 在首页调用随机推荐5篇文章
    {dede:arclist typeid='0' orderby='rand' row='5'}
        <a href="[field:arcurl/]" title="[field:title/]">[field:title function='cn_substr(@me,30)'/]</a>
    {/dede:arclist}

修改PHP核心文件(功能最强大,但有一定风险)

当你需要排序的字段不在数据库表中,或者需要非常复杂的SQL逻辑时,就需要修改PHP文件。

场景举例:按文章的Tag标签数量排序。

步骤

  1. 确定排序字段:首先你要知道数据库中哪个字段可以代表你的排序依据。click 是点击量,postnum 是评论数。

  2. 修改类文件:打开 /include/arc.listview.class.php 文件。

  3. 找到排序代码:搜索 GetSql() 函数或 ORDER BY 关键字,你会找到类似这样的代码:

    // 在大约第780行左右
    $orders = " ORDER BY arc.sortrank $orderway";
  4. 修改SQL语句:将 sortrank 替换为你想要的字段,并确保 $orderway 变量被正确使用。

    // 修改前
    // $orders = " ORDER BY arc.sortrank $orderway";
    // 修改后,按点击量降序
    $orders = " ORDER BY arc.click $orderway";
  5. 后台更新缓存:修改完成后,务必在后台点击「系统 -> SQL命令行工具 -> 更新缓存」,让修改生效。

⚠️ 重要警告

  • 此方法有风险,错误修改可能导致网站无法正常显示。
  • 修改前务必备份原文件。
  • 尽量使用方法二,除非方法二无法满足你的需求。

总结与推荐

方法 适用场景 优点 缺点
后台设置 栏目列表页的常规排序(时间、点击、评论等) 简单、快速、无代码 排序方式有限,需每个栏目单独设置
修改模板 需要自定义排序字段(如标题)、随机排序、在首页等非列表页调用 最灵活、最常用、最安全 需要修改模板文件,部分字段需额外修改PHP文件支持
修改PHP 需要基于数据库中复杂字段或自定义逻辑进行排序 功能最强大,可实现任何数据库支持的排序 有风险,操作复杂,不推荐新手使用

给你的建议

  1. 首先尝试方法一,看看是否满足你的基本需求。
  2. 如果方法一不够用,优先使用方法二,它能解决90%以上的排序问题。
  3. 只有在方法二也无法实现,并且你对DedeCMS有较深了解时,才考虑使用方法三。

希望这些信息能帮助你成功实现DedeCMS文章列表的排序!

-- 展开阅读全文 --
头像
织梦二谁码生成插件是什么?
« 上一篇 04-24
dede属性样式标签如何正确使用?
下一篇 » 04-24

相关文章

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

目录[+]