我有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>
我错过了什么?
答案 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>