【问题标题】:Filter posts by current date and then for loop with limit按当前日期过滤帖子,然后使用限制循环
【发布时间】:2019-12-12 12:45:02
【问题描述】:

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

我最初设置了这个,但意识到循环在我设置的限制 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 %}

因此,我意识到我需要完全在 for 循环之外设置过滤器,然后遍历过滤后的数组。

这是我认为可以代替的方法,但它不起作用:

{% 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 %}

我知道我可能需要使用 where_exp,它返回一个过滤后的数组,我可以循环遍历该数组,但不知道如何设置它。感谢您的帮助!

【问题讨论】:

    标签: date jekyll liquid


    【解决方案1】:

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

    这是给您的similar question,建议对日期格式进行规范化以进行正确比较。

    如何通过使用 site.time 而不是 now 和自定义日期格式来简化您的代码?

    site.time

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

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

    {% 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 计算当前日期的时间的3 个帖子。

    当我在 2019 年 8 月 12 日运行上面的示例代码时,{{ 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
    

    【讨论】:

    • 天啊@Kin,你是圣人。我是如此接近,感谢您对此进行微调 :) 抱歉回复了这么长,最近工作非常忙,所以没有时间看一眼。再次感谢! -kclivingood
    • @kclivingood 感谢您的客气话,很高兴我能帮助您应对挑战。
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多