按当前日期进行过滤帖子,然后进行限制循环



我只想在主页上显示即将发生的事件,然后限制为三个。我能够循环完成所有事件,但是我无法弄清楚如何设置过滤器。

我最初设置了这个,但意识到循环停止在我设置的极限3:

{% capture now %}{{ 'now' | date: "%Y-%m-%d" }}{% endcapture %}
{% for event in site.events limit:3 %}
  {% capture date %}{{ event.date | date: "%Y-%m-%d" }}{% endcapture %}
  {% if date >= now %}

因此,我意识到我需要在循环外部完全设置过滤器,然后循环通过该过滤的数组。

这是我在想的方法,而是行不通的,但它行不通:

{% capture now %}{{ 'now' | date: "%Y-%m-%d" }}{% endcapture %}
{% capture date %}{{ site.events | date: "%Y-%m-%d" }}{% endcapture %}
{% assign filtered_events = site.events | where_exp:"date", "date >= now" %}
{% for event in filtered_events limit:3 %}
<!--insert content-->
{% endfor %}

我知道我可能需要使用一个wery_exp,该_exp返回一个可以循环的过滤数组,但无法弄清楚如何设置此设置。感谢您的帮助!

我认为您的 where_exp的根本原因是由于{{ 'now' | date: "%Y-%m-%d" }}和每个events日期字段具有不匹配date格式。我正在观察_posts*.md文件的默认日期格式是date: "%Y-%m-%d %H:%M"

这与您的一个类似的问题,建议将日期格式归一化以进行正确比较。

如何使用site.time而不是使用自定义日期格式来简化代码?

site.Time

当前时间(运行jekyll命令时(。

我能够在我的小jekyll测试环境中使用minima,.md文件中的_posts目录中的CC_11文件。

{% assign filtered_posts = site.posts | where_exp: "post", "post.date >= site.time" %}
{% assign sorted-posts = filtered_posts | sort: 'post_date' | reverse %}
{% for event in sorted-posts limit:3 %}
    {{ event.id | inspect }}
{% endfor %}

注意:添加了reverse排序,以便您仅显示使用liquid/jekyll的当前日期的最接近的帖子。

当我在08-12-2019运行上面的示例代码时,{{ event.id | inspect }}的输出在下面:

"/MISC/2019/08/13/bar"/MISC/2019/08/14/lala" "/MISC/2019/08/15/bar-opy"

我的_posts目录中的文件。

2016-05-19-super-short-article.md
2016-05-20-my-example-post.md
2016-05-20-super-long-article.md
2016-05-20-this-post-demonstrates-post-content-styles.md
2016-05-20-welcome-to-jekyll.md
2019-08-12-foo.md
2019-08-13-bar.md
2019-08-14-lala.md
2019-08-15-bar-opy.md
2019-08-16-bar.md

相关内容

最新更新