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

(图片来源网络,侵删)
- 登录DedeCMS后台。
- 进入「栏目管理」。
- 找到你想要修改排序的栏目,点击「修改」。
- 在栏目编辑页面,找到「列表选项」这一栏。
- 在「排序方式」的下拉菜单中,选择你想要的排序方式:
- 默认:按文章发布时间倒序。
- 置顶:将有“置顶”属性的文章排在前面。
- 只看头条:只显示头条文章。
- 按ID降序:按文章ID从大到小排序(新发布的文章ID更大,所以效果和默认类似)。
- 按ID升序:按文章ID从小到大排序(旧文章排在前面)。
- 按评论数:按文章的评论数量排序。
- 按点击数:按文章的点击(浏览)数量排序。
- 按评分:按文章的评分排序。
优点:
- 操作简单,无需代码。
- 设置即时生效。
缺点:
- 只能使用DedeCMS预设的几种排序方式。
- 每个栏目需要单独设置。
修改模板文件(最灵活,适用于自定义排序)
如果你需要使用更复杂的排序方式,或者希望在特定页面(如首页、自定义页面)实现排序,就需要修改模板文件。
核心原理:在调用文章列表的 {dede:list} 或 {dede:arclist} 标签中,使用 orderby 和 orderway 属性来指定排序字段和排序方向。

(图片来源网络,侵删)
使用 {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: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'表示调用所有栏目的内容。orderby和orderway: 与{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标签数量排序。
步骤:
-
确定排序字段:首先你要知道数据库中哪个字段可以代表你的排序依据。
click是点击量,postnum是评论数。 -
修改类文件:打开
/include/arc.listview.class.php文件。 -
找到排序代码:搜索
GetSql()函数或ORDER BY关键字,你会找到类似这样的代码:// 在大约第780行左右 $orders = " ORDER BY arc.sortrank $orderway";
-
修改SQL语句:将
sortrank替换为你想要的字段,并确保$orderway变量被正确使用。// 修改前 // $orders = " ORDER BY arc.sortrank $orderway"; // 修改后,按点击量降序 $orders = " ORDER BY arc.click $orderway";
-
后台更新缓存:修改完成后,务必在后台点击「系统 -> SQL命令行工具 -> 更新缓存」,让修改生效。
⚠️ 重要警告:
- 此方法有风险,错误修改可能导致网站无法正常显示。
- 修改前务必备份原文件。
- 尽量使用方法二,除非方法二无法满足你的需求。
总结与推荐
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 后台设置 | 栏目列表页的常规排序(时间、点击、评论等) | 简单、快速、无代码 | 排序方式有限,需每个栏目单独设置 |
| 修改模板 | 需要自定义排序字段(如标题)、随机排序、在首页等非列表页调用 | 最灵活、最常用、最安全 | 需要修改模板文件,部分字段需额外修改PHP文件支持 |
| 修改PHP | 需要基于数据库中复杂字段或自定义逻辑进行排序 | 功能最强大,可实现任何数据库支持的排序 | 有风险,操作复杂,不推荐新手使用 |
给你的建议:
- 首先尝试方法一,看看是否满足你的基本需求。
- 如果方法一不够用,优先使用方法二,它能解决90%以上的排序问题。
- 只有在方法二也无法实现,并且你对DedeCMS有较深了解时,才考虑使用方法三。
希望这些信息能帮助你成功实现DedeCMS文章列表的排序!
