11

简洁版本:

我想将 1 添加到液体模板中的数字并将结果用作数组索引。

{% capture plus_one %}{{ 0 | plus: 1 }}{% endcapture %}
<div>-Value of plus_one: {{plus_one}}</div>
<div>-This works: {{site.posts[1].title}}</div>
<div>-This doesn't: {{site.posts[plus_one].title}}</div>

结果:

-Value of plus_one: 1
-This works: The Zone
-This doesn't:

长版:

我正在使用 Jekyll,没有插件。我想给当前帖子一个链接,指向下一个属于同一类别的帖子。(在此代码中,类别被硬编码为“期刊”。)

我的代码遍历类别数组中的所有帖子,查找当前帖子。找到后,我尝试在类别数组中抓取下一篇文章。

{% for num in (0..site.categories.journal.size) %}
    {% assign page2 = site.categories.journal[num] %}
        {% if page2.title == page.title and page2.date == page.date %}
            {% capture plus_one %}{{ num | plus: 1 }}{% endcapture %}
        {% endif %}
{% endfor %}

<div>value of plus_one: {{plus_one}}</div>
<div>This doesn't work: {{site.categories.journal[plus_one].title}}</div>
<div>This does: {{site.categories.journal[1].title}}</div>

结果:

<div>value of plus_one: 1</div>
<div>This doesn't work: </div>
<div>This does: A Blog Post Title</div>

我猜我的变量“plus_one”的值被视为字符串而不是数字。

有没有办法把它转换成数字?

还是有另一种方法来实现我想要做的事情?

4

5 回答 5

9
{% for category in site.categories %}
    {% assign catg_name = category.first %}
    {% if catg_name == page.category %}
        {% assign catg_posts = category.last %}
    {% endif %}
{% endfor %}
{% for post in catg_posts %}
    {% if post.title == page.title %}
        {% unless forloop.last %}
            {% assign next = catg_posts[forloop.index] %}
            <li class="previous">
            <a href="{{ site.baseurl }}{{ next.url }}">&larr;{{ next.title }}</a>
            </li>
        {% endunless %}
        {% unless forloop.first %}
            <li class="next">
            <a href="{{ site.baseurl }}{{ prev.url }}">{{ prev.title }}&rarr;</a>
            </li>
        {% endunless %}
    {% endif %}
    {% assign prev = post %}
{% endfor %}

正如您所提到的,您可以保存并使用上一个帖子链接的上一个迭代值(在我的情况下,我将它用作下一个帖子链接,因为我不想要默认的最新优先顺序)。对于下一个数组元素,您可以使用forloop.index. 这是 for 循环的从 1 开始的索引,将为您提供从零开始的数组的下一项。

于 2013-05-24T09:56:54.450 回答
8

assign保留号码:

{% for item in items %}
    {% assign next_i = forloop.index0 | plus: 1 %}
    {% assign prev_i = forloop.index0 | minus: 1 %}
    {{ items[next_i] }}
    {{ items[prev_i] }}
{% endfor %}
于 2014-08-29T01:34:00.840 回答
2

您可以通过page.nextpage.previous 按照 jekyll wiki 中的说明访问下一篇/上一篇文章。

当您希望它属于同一类别时,您必须将其分配给一个临时变量,迭代该步骤,直到找到匹配的帖子(同一类别的帖子)。

由于液体的工作方式,您不能使用您的 plus_one 变量 - 它只是一个字符串。在液体中使用数学是相当复杂的,当我在液体中实现我的加权标签云时,我几乎头疼。

于 2013-04-26T09:05:50.177 回答
2

我不知道自接受答案以来 jekyll 是否发生了变化,但我必须进行一些更改才能使其正常工作。根据 jekyll 变量文档,没有 page.category,只有 page.categories 列表。在我的网站中,每个帖子我只使用一个类别,因此第一个类别对我有用。如果您在每个帖子中使用多个类别,则必须对此进行调整。我也遇到了问题,因为我的类别是大写的,所以我添加了小写字母。最后,在我的 config.yml 中,我使用的是 url 而不是 baseurl。希望这对其他人有所帮助,因为这是我发现按类别将上一个/下一个链接添加到所有帖子的最简单方法。

{% for category in site.categories %}
    {% assign catg_name = category.first %}
    {% if catg_name == page.categories.first | downcase %}
        {% assign catg_posts = category.last %}
    {% endif %}
{% endfor %}
{% for post in catg_posts %}
    {% if post.title == page.title %}
        {% unless forloop.last %}
            {% assign next = catg_posts[forloop.index] %}
            <a href="{{ site.url }}{{ next.url }}">&larr;{{ next.title }}</a> |
        {% endunless %}
        {% unless forloop.first %}
            | <a href="{{ site.url }}{{ prev.url }}">{{ prev.title }}&rarr;</a>
        {% endunless %}
    {% endif %}
    {% assign prev = post %}
{% endfor %}
于 2014-11-12T19:54:38.843 回答
1

我遇到了类似的问题,使用上面的答案我在我的网站上得到了以下工作。可能对其他人有帮助。

{% for num in (0..site.categories.work.size) %}
    {% assign page2 = site.categories.work[num] %}
    {% if page2.title == page.title and page2.date == page.date %}
        {% assign next_i = forloop.index0 | plus: 1 %}
        {% assign prev_i = forloop.index0 | minus: 2 %}

        {% if next_i == site.categories.work.size %}
            {% assign next_i = 1 %}
        {% endif %}
    {% endif %}
{% endfor %}

<nav class="pagination">
    <div class="next">
        <a href="work/{{site.categories.work[next_i].slug}}/">Next</a>
    </div>
    <div class="previous">
        <a href="work/{{site.categories.work[prev_i].slug}}/">Previous</a>
    </div>
</nav>
于 2014-08-30T09:04:04.827 回答