Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加可选权重以覆盖Jekyll中项目的默认排序_Jekyll_Liquid - Fatal编程技术网

添加可选权重以覆盖Jekyll中项目的默认排序

添加可选权重以覆盖Jekyll中项目的默认排序,jekyll,liquid,Jekyll,Liquid,我在一个Jekyll网站上收集了一些论文(作品)。这些项目有一个发布日期(pub_date),所以按逆时间顺序对它们进行排序没有问题,例如 {% assign work_sorted = site.work | sort: 'pub_date' | reverse %} 但是,我希望能够选择性地指定一个order整数来覆盖默认顺序,这样,如果一个项目具有order变量,它将按照该变量进行排序。然后,所有没有顺序的项目都应该按照反向发布日期进行排序 我已尝试使用group\u by,但我不能最后

我在一个Jekyll网站上收集了一些论文(
作品
)。这些项目有一个发布日期(
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' %}