如何使用 Jekyll 和 Liquid 根据帖子数量列出帖子?

How to list posts based off of number of posts with Jekyll and Liquid?

我试图解决这个问题,但一直无法得出令人满意的结论。

基本上,我想做的是检测我的 Jekyll 站点上 post 的数量,并根据该数字列出 post。例如,如果只有一个 post,我想完整列出 post,并包含所有格式。如果有两个 post,我想将它们都列为片段,并且没有 HTML 格式。如果有三个,则与两个 post 相同。如果超过三个,我想做与两个和三个 post 相同的操作,但是使用 "view all posts" link 因为我希望最多三个在主页上列出, 但如果不超过三个 post 则不需要 "view all posts" link。

在列出我当前的代码之前,我想指出我已经尝试使用 paginator.total_posts(我在我的网站上使用 jekyll-paginate)并且没有列出任何内容。

这是我目前的代码:

{% if site.posts | size == 1 %}
  {% for post in site.posts %}
    {{ first post coding, full-length }}      
  {% endfor %}
{% endif %}
{% if site.posts | size == 2 %}
  {% for post in site.posts limit:1 %}
    {{ first post coding, snippet }}    
  {% endfor %}
  {% for post in site.posts limit:1 offset:1 %}
    {{ second post coding, snippet }}   
  {% endfor %}
{% endif %}
{% if site.posts | size == 3 %}
  {% for post in site.posts limit:1 %}
    {{ first post coding, snippet }}    
  {% endfor %}
  {% for post in site.posts limit:1 offset:1 %}
    {{ second post coding, snippet }}   
  {% endfor %}
  {% for post in site.posts limit:1 offset:2 %}
    {{ third post coding, snippet }}    
  {% endfor %}
{% endif %}
{% if site.posts | size > 3 %}
  {% for post in site.posts limit:1 %}
    {{ first post coding, snippet }}    
  {% endfor %}
  {% for post in site.posts limit:1 offset:1 %}
    {{ second post coding, snippet }}   
  {% endfor %}
  {% for post in site.posts limit:1 offset:2 %}
    {{ third post coding, snippet }}    
  {% endfor %}
  {{ "view all posts" link coding }}
{% endif %}

问题是我的页面正在输出所有 {% if %} 语句;它不只选择一个,即 {{ site.posts | size }} 输出的数字。这让我感到困惑,因为当我在我的代码中输入 {{ site.posts | size }} 时,它在每种情况下都会列出正确的数字。

我已经尝试将 == 更改为 contains 甚至 :,但我仍然得到相同的结果。

我不知道从这里到哪里去,所以非常感谢任何帮助。提前致谢。

您不应混用测试和过滤器。尝试以下操作:

{% assign post_count=site.posts | size %}
{% if post_count == 1 %}
...

请注意,对于数组,您可以使用大小属性而不是过滤器:

{% if site.posts.size == 1 %}
...