Jekyll 和 Liquid for 循环

Jekyll and Liquid for-loop

我想为页面导航创建一个小侧边导航。 该站点包含多个图像,一个在另一个之上,导航在每个图像内并链接到个人 ID。

我正在将 Jekyll 与液体模板引擎一起使用。为了不对每个元素进行硬编码,我创建了一个 for 循环,它获取单独的 .yml 文件的数据。

它应该是这样的:

Image

我的问题是它不适用于第一个元素。在第一个导航元素内,应该选择第一个圆圈。但它不是:

Image

这是代码:

{% for element in site.data.elements %}
{% capture number %}{{ forloop.length }}{% endcapture %}
<section id="spezial-{{forloop.index}}" {% assign imgIndex = {{forloop.index0}} %} class="spezial-img" style="background-image:url('{{ element.bild }}');">
    <div class="container spezial-container">
        <div class="sub-navi">
            <ul>
                {% for y in (1..number) %}
                    {% if imgIndex == naviIndex %}
                        <li><a href="#spezial-{{forloop.index}}" {% assign naviIndex = {{forloop.index}} %} {{ naviIndex }} class="active" ><i class="fa fa-dot-circle-o"></i></a></li>
                    {% else %}
                        <li><a href="#spezial-{{forloop.index}}" {% assign naviIndex = {{forloop.index}} %}><i class="fa fa-circle-o"></i></a></li>
                    {% endif %}
                {% endfor %}
            </ul>
        </div>
    </div>
</section>
{% endfor %}

您正在比较两个工作方式不同的计数器。

{% assign imgIndex = {{forloop.index0}}

这将从 0 计数到 array.size-1

{% assign naviIndex = {{forloop.index}}

这将从 1 计数到 array.size

因为你不在同一个"time zone",你有第一张图片

imgIndex == naviIndex
0 == 1 -> false

然后,从第二个循环开始,在每个循环中你将达到一次相等但不在正确的元素上。

例如,在第二个 imgIndex 元素上,活动 class 将设置在第一个 naviIndex 元素上,但这是错误的。对于以下所有元素都是相同的。

正确的代码可以是:

{% for element in site.data.elements %}
{% capture number %}{{ forloop.length }}{% endcapture %}
{% assign imgIndex = {{forloop.index}} %}
<section id="spezial-{{imgIndex}}" class="spezial-img" style="background-image:url('{{ element.bild }}');">
    <div class="container spezial-container">
        <div class="sub-navi">
            <ul>
                {% for naviIndex in (1..number) %}
                    {% if imgIndex == naviIndex %}
                      <li><a href="#spezial-{{forloop.index}}" %} {{ naviIndex }} class="active" ><i class="fa fa-dot-circle-o"></i></a></li>
                    {% else %}
                        <li><a href="#spezial-{{forloop.index}}" {% assign naviIndex = {{forloop.index}} %}><i class="fa fa-circle-o"></i></a></li>
                    {% endif %}
                {% endfor %}
            </ul>
        </div>
    </div>
</section>
{% endfor %}