如何在特定日期显示 Jekyll Collection 项? (流式语法问题?)

How do I show a Jekyll Collection item on a specific date? (Liquid syntax issue?)

我想我遇到的最基本的问题是为什么在 Liquid if 语句的开头使用数字似乎不起作用。

这个有效:

{% if quip.show == "foo" %}

这不是:

{% if quip.show == "1" %}

…但当然还有很多,这就是我要说的。

我有一个 Jekyll Collection 的小妙语,我想在网站在特定日期构建时显示。日常状态类型的东西。我用这些文件设置了一个 collection,制作了我的模板,一切都很棒。问题是在指定日期一次只出现一个。

我的第一个想法是将 date: 2020-06-17 添加到前面的内容,然后 运行 检查是否与今天的日期匹配,但这似乎与 Jekyll 隐含日期冲突。所以我将 front matter 标记更改为 show: 2020-06-17 只是为了排除故障。

所以现在我有一个 for 循环,它显示了我所有的讽刺:

{% for quip in site.quips %}
    (this is where my HTML is and it loops and renders each collection file perfectly)
    {% if quip.show == "2020-06-17" %}
        It's working. (this is where the quip HTML will go but I'm isolating it)
    {% endif %}
 {% endfor %}

这都是手动的,前面的字面意思是 show: 2020-06-17 但显然我希望它能自动获取日期,稍后会详细介绍。 …但它不打印 "It's working."。奇怪的是,当我在我的一个 collection 文件中将前面的内容更改为 show: foo 时,它确实显示 "It's working"。此外,当我将其更改为数字 1 时,它不起作用。所以 Jekyll 似乎不喜欢将数字作为 ``==` 中的第一个字符。

所以基本上这就是我想做的:

我有一个使用这个的变量集:

{% capture my_var %}{{ "now" | date: "%Y-%m-%d"}}{% endcapture %}

我在我的页面顶部添加了这个来获取日期(在其他一些事情似乎不起作用之后)

…这清楚地输出到 2020-06-17(通过调用变量并查看 HTML 输出确认。)

那么我想把它放在我的 collection 循环中:

{% if quip.show == "{{ my_var }}" %}
    It's Working
{% endif %}

({{ my var }} 周围的引号让我有些困惑,因为如果它们不存在,编译器会抱怨,但没有它们,事情就无法可靠地工作。那里没有线索,不是主要问题但我需要解决的问题)。

我的意思是,我的想法是用这个日期检测器 if 语句而不是打印 "It's working" 来包装我所有的俏皮话模板,但这将是一个很好的概念证明。

我真的不反对使用 Jekyll 内置的日期前言甚至文件名——每天只有一个。我已经尝试了很多东西,但出于某种原因,当我在 == 语句中使用数值时,我无法让它工作。

如有任何帮助,我们将不胜感激。

发生这种情况是因为前端是 YAML,而 YAML 可能比您想象的更聪明。

date: 2020-06-17

Is an actual valid date for YAML.

因此,如果我 JSON 打印在前面定义的 date,那么它会显示为日期:

{{ quip.date | json }}

2020-06-17 00:00:00 +0200

因此,如果您想比较封面和当天的日期,则必须设置这两个日期的格式。

{% assign now = "now" | date: "%Y-%m-%d" %}
{% assign show = quip.show | date: "%Y-%m-%d" %}
{% if show == now %}
  <p class="fresh-from-the-day">quip.title</p>
{% endif %}