我在Jekyll网站上有论文集(work
)。这些项目具有发布日期(pub_date
),因此按类似的顺序按相反的时间顺序对它们进行排序没有问题
{% assign work_sorted = site.work | sort: 'pub_date' | reverse %}
但是,我希望能够可选地指定一个order
整数以覆盖默认顺序,以便如果某项具有order
变量,则将其排序首先。然后,所有不带order
的项目都应跟随,并按反向的pub_date
排序。
我尝试使用group_by
,但最后不能将空白order
留空。我还考虑过为order
添加一个默认值(如果为空)(大约为999),但似乎不起作用。
答案 0 :(得分:2)
如果您使用优先级(显示最高的数字)而不是顺序(显示最低的数字,则非常简单)。这意味着如果您有5个work
,如下所示:
---
title: work-a
pub_date: 18-07-10
---
---
title: work-b
pub_date: 18-07-11
---
---
title: work-c
pub_date: 18-07-12
---
---
title: work-d
pub_date: 18-07-13
---
---
title: work-e
pub_date: 18-07-14
---
您当前的代码将按以下顺序输出项目:
work-e
work-d
work-c
work-b
work-a
假设您要先显示work-c
,然后再显示work-a
,而其余的则按相反的时间顺序显示。仅在priority
和work-c
的最前面添加一个work-a
属性:
---
title: work-a
pub_date: 18-07-10
priority: 2
---
---
title: work-b
pub_date: 18-07-11
---
---
title: work-c
pub_date: 18-07-12
priority: 1
---
---
title: work-d
pub_date: 18-07-13
---
---
title: work-e
pub_date: 18-07-14
---
以下代码将为您提供所需的结果:
{% assign sorted = site.work| sort: 'pub_date' | reverse %}
{% assign ordered = sorted | sort: 'priority' | reverse %}
{% for item in ordered %}
<p>{{ item.title }} - {{ item.pub_date }}</p>
{% endfor %}
我已经测试了上面的内容,但是如果您有任何问题,请告诉我。您仍然可以使用排序顺序(首先从小到大),但是您需要添加一堆条件并动态创建数组作为字符串,所以也许这样更好:)
答案 1 :(得分:2)
为集合添加默认值:
_config.yml
collections:
work:
output: true
defaults:
- scope:
type: work
values:
order: 999
现在,此过滤器链接可以解决问题:
{% assign work_sorted = site.work | sort: 'pub_date' | reverse | sort: 'order' %}