如何解决是否可以基于两个变量对Jekyll数组进行排序?
在我网站的首页上,我显示了一些最新的帖子:
{% for post in posts limit: 6 %}
...
{% endfor %}
这很好。
最近,我一直在回去编辑一些旧帖子,我希望它们显示在首页的此列表中。
我不想更改他们的日期。相反,我在编辑每个帖子时都在其上加上了一个新的lastUpdated
变量,并带有编辑日期。
layout: example
lastUpdated: 2020-09-07
---
所以现在我想修改首页上的代码,以便如果有帖子,则按lastUpdated
排序,否则应按date
排序。
我尝试过:
{% assign posts = site.posts
| reverse
| sort: "lastUpdated"
| reverse %}
{% for post in posts limit: 6 %}
...
{% endfor %}
我认为这可行,但是事实证明,它会将所有编辑过的帖子(包含lastEdited
变量的帖子)排在最前面,然后是新创建的帖子。我希望编辑后的帖子和新创建的帖子都根据其“修改”日期显示在此列表中。
我尝试过:
{% assign posts = site.posts
| sort: "lastUpdated or date" %}
{% for post in posts limit: 6 %}
...
{% endfor %}
但这可以按照默认顺序显示帖子,大概是因为"lastUpdated or date"
不是有效的属性。
我也尝试过:
{% assign posts = site.posts
| sort: "lastUpdated" or "date" %}
{% for post in posts limit: 6 %}
...
{% endfor %}
但这并不奇怪,这是一个语法错误。
有没有一种简单的方法可以使我丢失?
解决方法
写完这篇文章后,我nerd-sniped自己将创建两个数组的解决方案整合在一起,然后根据lastUpdated
和date
变量将它们合并在一起。
{% assign createdPosts = site.posts %}
{% assign updatedPosts = site.posts | sort: "lastUpdated" | reverse %}
{% assign createdIndex = 0 %}
{% assign updatedIndex = 0 %}
{% for i in (1..10) %}
{% assign createdDate = createdPosts[createdIndex].date | date: "%Y-%m-%d" %}
{% assign updatedDate = updatedPosts[updatedIndex].lastUpdated | date: "%Y-%m-%d" %}
{% if createdDate > updatedDate or updatedDate == nil %}
// HTML for createdPosts[createdIndex]
{% assign createdIndex = createdIndex | plus:1 %}
{% else %}
// HTML for updatedPosts[updatedIndex]
{% assign updatedIndex = updatedIndex | plus:1 %}
{% endif %}
{% endfor %}
要注意的一件事是,我无法直接比较date
和lastUpdated
,因为遇到了这个错误:comparison of Date with Time failed
,所以我不得不将它们都转换为字符串。 / p>
这感觉很复杂,因此我可能会回过头来用lastUpdated
填充每个帖子,以保持其简单性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。