添加可选权重以覆盖Jekyll中项目的默认排序
我在一个Jekyll网站上收集了一些论文(添加可选权重以覆盖Jekyll中项目的默认排序,jekyll,liquid,Jekyll,Liquid,我在一个Jekyll网站上收集了一些论文(作品)。这些项目有一个发布日期(pub_date),所以按逆时间顺序对它们进行排序没有问题,例如 {% assign work_sorted = site.work | sort: 'pub_date' | reverse %} 但是,我希望能够选择性地指定一个order整数来覆盖默认顺序,这样,如果一个项目具有order变量,它将按照该变量进行排序。然后,所有没有顺序的项目都应该按照反向发布日期进行排序 我已尝试使用group\u by,但我不能最后
作品
)。这些项目有一个发布日期(pub_date
),所以按逆时间顺序对它们进行排序没有问题,例如
{% assign work_sorted = site.work | sort: 'pub_date' | reverse %}
但是,我希望能够选择性地指定一个order
整数来覆盖默认顺序,这样,如果一个项目具有order
变量,它将按照该变量进行排序。然后,所有没有顺序的项目都应该按照反向发布日期进行排序
我已尝试使用group\u by
,但我不能最后将订单为空的项目保留下来。我还考虑过,如果订单为空(比如999),则在订单中添加一个默认值,但它似乎不起作用。如果您使用优先级(首先显示最高数字),而不是订单(首先显示最低数字),这是非常容易的。这意味着如果您有5件作品
,如下所示:
---
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
显示在第二位,而其余的则按相反的时间顺序显示。仅在work-c
和work-a
的前面添加priority
属性:
---
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 %}
{%assign sorted=site.work | sort:'pub_date'| reverse%}
{%assign ordered=sorted | sort:'priority'| reverse%}
{已排序%%中的项目的%1}
{{item.title}}-{{item.pub_date}
{%endfor%}
我已经测试了以上内容,但如果您有问题,请务必告诉我。您仍然可以使用排序顺序(先小后小),但您需要添加一系列条件并动态创建字符串数组,因此这一种可能更好:)如果您使用优先级(先显示最高数字)而不是顺序(先显示最低数字),这将非常容易。这意味着如果您有5件作品
,如下所示:
---
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
显示在第二位,而其余的则按相反的时间顺序显示。仅在work-c
和work-a
的前面添加priority
属性:
---
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 %}
{%assign sorted=site.work | sort:'pub_date'| reverse%}
{%assign ordered=sorted | sort:'priority'| reverse%}
{已排序%%中的项目的%1}
{{item.title}}-{{item.pub_date}
{%endfor%}
我已经测试了以上内容,但如果您有问题,请务必告诉我。您仍然可以使用排序顺序(先小后小),但您需要添加一组条件,并动态创建字符串数组,因此这一种可能更好:)向集合添加默认值:
\u config.yml
collections:
work:
output: true
defaults:
- scope:
type: work
values:
order: 999
现在,此过滤器链接实现了以下功能:
{% assign work_sorted = site.work | sort: 'pub_date' | reverse | sort: 'order' %}
向集合添加默认值:
\u config.yml
collections:
work:
output: true
defaults:
- scope:
type: work
values:
order: 999
现在,此过滤器链接实现了以下功能:
{% assign work_sorted = site.work | sort: 'pub_date' | reverse | sort: 'order' %}