Вложенные циклы жидкости на странице архива Jekyll не работают.Использование переменной внешнего цикла внутри условия inner - PullRequest
8 голосов
/ 15 апреля 2011

Я работаю со сборщиком статических сайтов jekyll, и мне трудно выполнить следующее:

{% for category in site.categories %} 
<h2 id = "{{ category[0] }}"> {{ category[0] }} </h2> 
        {% for post in site.categories[{{ category }}] %} 
                <li> <a href="{{ post.url }}"> {{ post.title }}</a></li> 
        {% endfor %} 
<a href="#{{ category[0] }}-ref">&#8617</a> 
{% endfor %} 

У меня есть категория постов на моем сайте jekyll под названием 'test', и я могу отображать постыиз него со следующим:

{% for post in site.categories.test %} 
                <li> <a href="{{ post.url }}"> {{ post.title }}</a></li> 
{% endfor %} 

Тем не менее, я хочу автоматически построить страницу архива, и для этого мне нужно встроить категорию из внешнего цикла (цикл, который посещает всекатегорий) и использовать его во внутреннем цикле для доступа к сообщениям из этой конкретной категории.Что мне нужно сделать, чтобы первый фрагмент работал так, как я хочу?

РЕДАКТИРОВАТЬ: В качестве альтернативы, есть ли другой способ получить результаты, которые я хочу?

Ответы [ 3 ]

14 голосов
/ 20 апреля 2011

Когда вы делаете for category in site.categories,

  • category[0] даст вам название категории,
  • category[1] даст вам список сообщений для этой категории.

Я полагаю, что именно так Liquid обрабатывает итерации по хэшам.

Итак, код, который вы ищете, такой:

{% for category in site.categories %} 
<h2 id="{{ category[0] }}-ref">{{ category[0] }}</h2>
<ul>
  {% for post in category[1] %} 
    <li><a href="{{ post.url }}">{{ post.title }}</a></li> 
  {% endfor %}
</ul>
<p><a href="#{{ category[0] }}-ref">&#8617;</a></p>
{% endfor %}

Я взялсвобода исправления некоторых проблем с разметкой - я добавил <ul>...</ul> вокруг списка ссылок поста, <p> вокруг последней ссылки, точку с запятой после 8617, а также исправил id в верхней части(отсутствует часть -ref).

С уважением!

1 голос
/ 17 апреля 2011

Как насчет ...

{% for category in site.categories %}
<h2 id = "{{ category[0] }}"> {{ category[0] }} </h2>
        <ul>
        {% for post in site.posts %}
            {% if post.category == category[0] %}
                 <li> <a href="{{ post.url }}"> {{ post.title }}</a></li>
            {% endif %}
        {% endfor %}
        </ul>
<a href="#{{ category[0] }}-ref">&#8617</a>
{% endfor %}

Конечно, это довольно неэффективно и генерирует кучу лишних пробелов, но оно выполняет свою работу.

[В оригинале отсутствовали теги. Просто добавил их. Кроме того, чтобы получить пробел, можно свернуть все от for post in site.posts до endfor в одну строку.]

0 голосов
/ 19 апреля 2011
        {% for post in site.categories.category %} 
        - OR -
        {% for post in site.categories.category[0] %} 

Кроме того, я не уверен, почему пример kshep не работает ...

...