织梦listorderby参数如何正确排序?

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

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

织梦 list orderby
(图片来源网络,侵删)

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 参数来控制是升序还是降序。

织梦 list orderby
(图片来源网络,侵删)

orderway 参数有两个可选值:

  • asc:升序(从小到大,A到Z,旧到新)
  • desc:降序(从大到小,Z到A,新到旧)

orderway 默认值:对于 sortrankid,默认是 desc;对于 pubdatesenddate,默认是 asc,但为了代码清晰,强烈建议显式指定

示例组合:

  1. 最新文章(按发布时间倒序) 这是最常见的列表排序方式,最新发布的文章排在最前面。

    {dede:list orderby='pubdate' orderway='desc'}
        <!-- 循环内容 -->
    {/dede:list}
  2. 热门文章(按点击量倒序) 点击量最高的文章排在最前面。

    织梦 list orderby
    (图片来源网络,侵删)
    {dede:list orderby='click' orderway='desc'}
        <!-- 循环内容 -->
    {/dede:list}
  3. 随机文章 每次刷新都随机展示几篇文章。

    {dede:list orderby='rand'}
        <!-- 注意:orderby='rand' 时,orderway 参数无效 -->
    {/dede:list}
  4. 自定义排序(手动排序) 在后台发布文章时,可以设置“文章排序值”(通常在高级选项里),这个值越大,文章越靠前。

    {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}

完整示例与最佳实践

假设我们要做一个首页的文章列表,要求:

  1. 显示8条文章。
  2. 按发布时间倒序排列(最新的在前)。
  3. 和发布日期。

代码实现:

<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}: 结束标签。

常见问题排查

  1. Q:为什么我设置了 orderby='click' orderway='desc',但点击量高的文章没有排在前面?

    • A: 最可能的原因是这些文章的点击量数据为0或者相同,请确保这些文章有一定的点击量,并且点击量有差异,你也可以在后台手动点击文章增加点击量进行测试。
  2. Q:orderby='rand' 为什么有时候效果不明显?

    • A: rand 是在数据库层面进行随机排序,如果列表数据量很大(比如几十上百条),随机性会很强,但如果数据量很小(比如几条),每次刷新可能感觉变化不大。rand 排序对数据库性能有一定影响,不建议在数据量大的列表中频繁使用。
  3. Q:如何实现“先置顶,再按时间排序”?

    • A: 这可以通过多字段排序完美解决,假设“置顶”是通过设置一个较高的 sortrank 值来实现的,那么下面的代码就可以满足需求:
      {dede:list orderby='sortrank desc,pubdate desc'}
          <!-- 循环内容 -->
      {/dede:list}

      这样,所有文章会先按 sortrank(你的手动排序/置顶值)从高到低排,然后对于 sortrank 相同的文章,再按 pubdate(发布时间)从新到旧排。

希望这份详细的讲解能帮助你完全掌握织梦CMS中 {dede:list}orderby 用法!

-- 展开阅读全文 --
头像
织梦上传错误怎么解决?
« 上一篇 2025-12-18
C语言getline后为何要free?
下一篇 » 2025-12-18

相关文章

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

目录[+]