orderby 是 {dede:list} 标签中一个核心且常用的属性,用于控制文章列表的显示顺序。

orderby 参数的基本语法
orderby 参数需要放在 {dede:list} 标签的内部,格式如下:
{dede:list orderby='排序字段'}
<li>
<a href='[field:arcurl/]'>[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
'排序字段' 就是你要指定的排序依据,比如按发布时间、点击量等。
常用的 orderby 值(排序字段)
以下是织梦CMS中最常用的一些 orderby 值及其含义:
| orderby 值 | 中文名称 | 说明 | 备注 |
|---|---|---|---|
id |
文章ID | 按文章在数据库中的ID进行排序。 | 默认为正序(从小到大)。 |
sortrank |
文章排序值 | 按后台设置的“文章排序值”排序。 | 这是实现“手动排序”的关键。 |
pubdate |
发布时间 | 按文章的发布时间排序。 | 最常用,默认为正序(从旧到新)。 |
senddate |
更新时间 | 按文章的最后更新时间排序。 | 适用于经常更新内容的场景。 |
click |
点击量 | 按文章的点击次数排序。 | 常用于制作“热门文章”排行。 |
lastpost |
最后评论时间 | 按文章最后收到评论的时间排序。 | 常用于制作“最新评论”列表。 |
scores |
评论分数 | 按文章获得的评论总分排序。 | 较少使用。 |
rand |
随机排序 | 随机显示文章列表。 | 每次刷新页面,文章顺序都会改变。 |
结合 orderway 参数控制升序/降序
仅仅指定 orderby 是不够的,你通常还需要配合 orderway 参数来控制是升序还是降序。

orderway 参数有两个可选值:
asc:升序(从小到大,A到Z,旧到新)desc:降序(从大到小,Z到A,新到旧)
orderway 默认值:对于 sortrank 和 id,默认是 desc;对于 pubdate 和 senddate,默认是 asc,但为了代码清晰,强烈建议显式指定。
示例组合:
-
最新文章(按发布时间倒序) 这是最常见的列表排序方式,最新发布的文章排在最前面。
{dede:list orderby='pubdate' orderway='desc'} <!-- 循环内容 --> {/dede:list} -
热门文章(按点击量倒序) 点击量最高的文章排在最前面。
(图片来源网络,侵删){dede:list orderby='click' orderway='desc'} <!-- 循环内容 --> {/dede:list} -
随机文章 每次刷新都随机展示几篇文章。
{dede:list orderby='rand'} <!-- 注意:orderby='rand' 时,orderway 参数无效 --> {/dede:list} -
自定义排序(手动排序) 在后台发布文章时,可以设置“文章排序值”(通常在高级选项里),这个值越大,文章越靠前。
{dede:list orderby='sortrank' orderway='desc'} <!-- 循环内容 --> {/dede:list}
高级用法:多字段排序
织梦CMS的 orderby 也支持多字段排序,用逗号隔开,当第一个字段的值相同时,会按照第二个字段进行排序。
示例: 先按“文章排序值”(sortrank)降序排列,如果排序值相同,则再按“发布时间”(pubdate)降序排列。
{dede:list orderby='sortrank desc,pubdate desc'}
<li>
<a href='[field:arcurl/]'>[field:title/]</a>
<span>排序值: [field:sortrank/] | 时间: [field:pubdate function="MyDate('Y-m-d',@me)"]</span>
</li>
{/dede:list}
完整示例与最佳实践
假设我们要做一个首页的文章列表,要求:
- 显示8条文章。
- 按发布时间倒序排列(最新的在前)。
- 和发布日期。
代码实现:
<h2>最新文章</h2>
<ul class="news_list">
{dede:list pagesize='8' orderby='pubdate' orderway='desc'}
<li>
<span class="title"><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"]</span>
</li>
{/dede:list}
</ul>
代码解析:
{dede:list ...}: 开始标签。pagesize='8': 设置每页显示8条数据。orderby='pubdate': 指定按“发布时间”排序。orderway='desc': 指定按“降序”排列(新到旧)。[field:arcurl/]: 文章链接。[field:title/]: 文章标题。[field:pubdate function="MyDate('Y-m-d',@me)"]: 调用自定义函数格式化发布日期。{/dede:list}: 结束标签。
常见问题排查
-
Q:为什么我设置了
orderby='click' orderway='desc',但点击量高的文章没有排在前面?- A: 最可能的原因是这些文章的点击量数据为0或者相同,请确保这些文章有一定的点击量,并且点击量有差异,你也可以在后台手动点击文章增加点击量进行测试。
-
Q:
orderby='rand'为什么有时候效果不明显?- A:
rand是在数据库层面进行随机排序,如果列表数据量很大(比如几十上百条),随机性会很强,但如果数据量很小(比如几条),每次刷新可能感觉变化不大。rand排序对数据库性能有一定影响,不建议在数据量大的列表中频繁使用。
- A:
-
Q:如何实现“先置顶,再按时间排序”?
- A: 这可以通过多字段排序完美解决,假设“置顶”是通过设置一个较高的
sortrank值来实现的,那么下面的代码就可以满足需求:{dede:list orderby='sortrank desc,pubdate desc'} <!-- 循环内容 --> {/dede:list}这样,所有文章会先按
sortrank(你的手动排序/置顶值)从高到低排,然后对于sortrank相同的文章,再按pubdate(发布时间)从新到旧排。
- A: 这可以通过多字段排序完美解决,假设“置顶”是通过设置一个较高的
希望这份详细的讲解能帮助你完全掌握织梦CMS中 {dede:list} 的 orderby 用法!
