Jekyll 和 Liquid for 循环

zen*_*rmi 4 html navigation for-loop liquid jekyll

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

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

它应该是这样的:

图片

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

图片

这是代码:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

Dav*_*uel 7

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

{% assign imgIndex = {{forloop.index0}}
Run Code Online (Sandbox Code Playgroud)

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

{% assign naviIndex = {{forloop.index}}
Run Code Online (Sandbox Code Playgroud)

这将从 1 计数到 array.size

由于您不在同一个“时区”,对于您拥有的第一张图片

imgIndex == naviIndex
0 == 1 -> false
Run Code Online (Sandbox Code Playgroud)

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

imgIndex例如,在第二个元素上,将在第一个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 %}
Run Code Online (Sandbox Code Playgroud)