所以我试图展示最新的 5 个即将举行的事件。我正在将所有内容从数据文件中提取出来。但我注意到,当事件过期并保留在数据文件中时,主页显示 5 减去过期事件的数量。
例如,如果有 1 个事件已过期,则主页将仅显示 4 个即将发生的事件,而不是跳过过期事件并循环播放。有人可以帮忙吗?谢谢!
{% assign eventPost = site.data.events | sort: 'date' %}
{% for event in eventPost limit:5 %}
{% assign curDate = site.time | date: '%Y-%m-%d' %}
{% assign postStartDate = event.date | date: '%Y-%m-%d' %}
{% if postStartDate >= curDate %}
<div class="content--block">
<div class="event--info">
<p class="content--date">{{ event.date | date: '%B %-d, %Y' }}</p>
<h3 class="content--title">{{ event.title }}</h3>
{% if event.time %}
<p class="content--location"><strong>{{ event.location }}</strong> at <strong>{{ event.time }}</strong></p>
{% else %}
<p class="content--location"><strong>{{ event.location }}</strong></p>
{% endif %}
{% if event.subheader %}
<p class="content--description">{{ event.subheader }}</p>
{% endif %}
</div>
{% if event.button == true %}
<a href="{{ event.eventlink }}" target="_blank"><button class="outline">Attend</button></a>
{% endif %}
</div>
{% endif %}
{% endfor %}
最佳答案
{% for event in eventPost limit:5 %}
指示 Liquid 创建一个包含前 5 个 eventPost
元素的临时数组。您的循环肯定会循环超过 5 个元素,不再循环。
改用计数器。请注意,为了简洁起见,我在打印循环中截取了代码。
{% assign eventPost = site.data.events | sort: 'date' %}
{% assign eventsNumber = 5 %}
{% assign printedEvents = 0 %}
{% for event in eventPost %}
{% assign curDate = site.time | date: '%Y-%m-%d' %}
{% assign postStartDate = event.date | date: '%Y-%m-%d' %}
{% if (postStartDate >= curDate) and (printedEvents < eventsNumber) %}
{% assign printedEvents = printedEvents | plus: 1 %}
<p>{{ event.date | date: '%B %-d, %Y' }} - {{ event.title }}</p>
{% endif %}
{% endfor %}
然后,您只需更改 eventsNumber
即可更改打印事件的数量。
关于Jekyll:过期日期循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419830/