如何限制前面过滤的帖子?

时间:2013-04-10 00:42:53

标签: jekyll

我有Jekyll博客,其中一些帖子有“精选图片”,有些帖子没有。

特色图片在帖子的前面部分定义如下:featured-image: http://path/to/img

在存档页面上,我想抓住最近发布的三篇文章,并展示它们。

我想这需要一个if语句,一个计数器和一个循环,但我无法让这个为我工作:

<ul id="archive-featured">
  {% assign count = '0' %}
  {% if count < '4' %}
    {% for post in site.posts %}
      {% if post.featured-image == true %}
        {{ count | plus: '1' }}
        <li><a href="{{ post.url }}"><img src="{{post.featured-image}}" />{{ post.title }}</a></li>
      {% endif %}
    {% endfor %}
  {% endif %}
</ul>

我错过了什么?

2 个答案:

答案 0 :(得分:4)

你的YAML问题看起来不错,但我不确定你是否需要计算任务来完成这项工作。请尝试使用limit来限制您在存档页面上分配的帖子数量。您也无需为{% if %}语句指定“true”值:

<ul id="archive-featured">
{% for post in site.posts limit:3 %}
  {% if post.featured-image %}
    <li>
      <a href="{{ post.url }}">
        <img src="{{ post.featured-image }}" />
        {{ post.title }}
      </a>   
    </li>
  {% endif %}
{% endfor %}
</ul>

我相信这些帖子会在最近的帖子中自动显示,所以不需要在那里做额外的工作。希望这有帮助!

答案 1 :(得分:0)

一个很晚的答案:
我认为问题出在{{count | plus: 1}}。这不是只输出计数+1,而不分配它吗? 您可以通过在forloop结束之前分配一个新变量来解决此问题

<ul id="archive-featured">
  {% assign count = 0 %}
  {% if count < 4 %}
    {% for post in site.posts %}
      {% if post.featured-image == true %}

        <li><a href="{{ post.url }}"><img src="{{post.featured-image}}" />{{ post.title }}</a></li>
{% count | plus: 1 %}
      {% endif %}
    {% endfor %}
  {% endif %}
</ul>

可能有趣的解决方法: 如果您在前面添加了另一个简单的语句,例如featured: true,则可以使用where过滤器仅选择那些帖子。 (可悲的是,where过滤器似乎不适用于比较)

<ul id="archive-featured">
  {% assign posts=site.posts | where "featured", "true" %}
    {% for post in posts | limit: 3%}
        <li><a href="{{ post.url }}"><img src="{{post.featured-image}}" />{{ post.title }}</a></li>
    {% endfor %}
</ul>