4

我有 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>

我错过了什么?

4

2 回答 2

4

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

<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>

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

于 2013-04-10T01:34:07.910 回答
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>
于 2019-02-14T20:40:32.820 回答