User 69e88e27
发布于:2026-01-16
order_by 是一个 Liquid 过滤器,用于对数据集合进行排序。排序规则由不同的集合类型所支持的方式而决定。该过滤器只对集合 Drop 对象有效,如果输入不是集合 Drop,将返回空数组。{{ 集合 | order_by: "字段名" }}
{{ 集合 | order_by: "-字段名" }} <!-- 降序排序 -->
{{ 集合 | order_by: "字段1", "字段2" }} <!-- 多字段排序 -->
"created_at"- 前缀,如 "-created_at"created_at - 创建时间
- visits_count - 访问次数
- edited_at - 编辑时间
- published_at - 发布时间
- feedbacks_count - 反馈数量{%# 按创建时间降序排序(最新在前) %}
{% assign latest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' %}
{%# 按访问次数降序排序(最热门在前) %}
{% assign popular_pages = site.pages['/'].pages_in_list | order_by: '-visits_count' %}
{%# 按创建时间升序排序(最早在前) %}
{% assign oldest_pages = site.pages['/'].pages_in_list | order_by: 'created_at' %}
created_at - 创建时间
- published_replies_count - 已发布的回复数量
- feedbacks_count - 反馈数量{%# 按创建时间降序排序(最新评论在前) %}
{% assign newest_comments = site.comments | order_by: '-created_at' %}
{%# 按回复数量降序排序(回复最多的在前) %}
{% assign popular_comments = site.comments | order_by: '-published_replies_count' %}
created_at - 创建时间
- pages_count - 创建的页面数量
- comment_count - 评论数量{%# 按创建时间降序排序(最新成员在前) %}
{% assign newest_members = site.members | order_by: '-created_at' %}
{%# 按页面数量降序排序(创建页面最多的在前) %}
{% assign active_members = site.members | order_by: '-pages_count' %}
{% assign newest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 10 %}
<ul>
{% for page in newest_pages %}
<li>
<a href="{{ page.path }}">{{ page.link_text }}</a>
<span>创建于:{{ page.created_at | date: "%Y-%m-%d" }}</span>
</li>
{% endfor %}
</ul>
{% assign hottest_pages = site.pages['/'].pages_in_list | order_by: '-visits_count' | limit: 10 %}
<div class="popular-pages">
<h2>热门页面</h2>
{% for page in hottest_pages %}
<div class="page-item">
<a href="{{ page.path }}">{{ page.link_text }}</a>
<span class="visits">访问量:{{ page.visits_count }}</span>
</div>
{% endfor %}
</div>
{%# 从参数获取排序规则,默认为创建时间降序 %}
{% assign sort_field = params.sort | default: '-created_at' %}
{% assign pages = site.pages['/'].children_in_list | order_by: sort_field %}
{%# 或者根据条件选择排序方式 %}
{% if params.order == 'popular' %}
{% assign pages = site.pages['/'].children_in_list | order_by: '-visits_count' %}
{% elsif params.order == 'oldest' %}
{% assign pages = site.pages['/'].children_in_list | order_by: 'created_at' %}
{% else %}
{% assign pages = site.pages['/'].children_in_list | order_by: '-created_at' %}
{% endif %}
order_by 通常与其他过滤器组合使用,实现更复杂的数据处理。{%# 获取最新 5 个页面 %}
{% assign latest_5 = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 5 %}
{%# 先筛选,再排序 %}
{% assign articles = site.pages | where: 'template_name', 'article' | order_by: '-created_at' %}
{%# 获取热门页面,限制 10 条 %}
{% assign popular = site.pages['/'].pages_in_list | order_by: '-visits_count' | limit: 10 %}
{%# ❌ 错误示例 %}
{% assign page = site.pages | first %}
{% assign sorted = page | order_by: '-created_at' %} <!-- page 不是集合 -->
page 是单个对象,不是集合,order_by 会返回空数组。{%# ✅ 正确示例 %}
{% assign pages = site.pages['/'].pages_in_list | order_by: '-created_at' %}
{%# ❌ 错误示例 %}
{% assign pages = site.pages | order_by: 'title' %} <!-- title 不是支持的排序字段 -->
title 不是 PagesDrop 支持的排序字段,会被忽略。created_at、visits_count 等。{%# ❌ 错误示例 %}
{% assign pages = site.pages | order_by: 'created_at desc' %} <!-- 语法错误 -->
desc 后缀,应该使用 - 前缀。{%# ✅ 正确示例 %}
{% assign pages = site.pages | order_by: '-created_at' %}
limit 使用,避免性能问题order_by 过滤器是处理集合数据排序的重要工具,支持多种排序字段和排序方向。正确使用此过滤器可以实现各种排序需求,如最新列表、热门内容、活跃用户等。记住只对集合 Drop 使用,并选择合适的排序字段,结合 limit 使用以优化性能。