Jekyll中的打印标签打印整个帖子和其他问题

时间:2014-10-31 05:48:59

标签: arrays loops jekyll

所以基本上我有this problem。我想打印类别名称作为标题,但是到目前为止,我已经尝试过任何有关几个单词的类别,所以我已经解决了它在每个帖子中设置标签和类别的问题

所以在做出这个决定之后,我测试了2个标签和2个类别,tag1 cat1tag2 cat2,其中每个标签都有一个对应的类别。然后我将这些标签/猫对添加到我的一些帖子中。我的算法如下所示:

for loop in tags

    print category in a heading tag

        for loop in posts of that category

            print some post info

,翻译成代码,看起来像这样:

{% assign i = 0 %}
{% for TAG in site.tags %}
    <p>Checking the i: {{ i }}</p> 
    <p>Checking the tag: {{ TAG }}</p> 
    <h1>Checking the cat: {{ site.categories[i] }}</h1> 

    {% for post in site.tags.TAG %}
        <p>{{ post.title }}</p>
    {% endfor %}
    {% assign i = i + 1 %}
{% endfor %}

输出是:

Checking the i: 0
Checking the tag: tag1
THE WHOLE POST
Checking the cat: (nothing is printed here)

Checking the i: 0
Checking the tag: 0
Checking the cat: (nothing is printed here)

然后停止。

所以我的问题是:

  • 如何访问该类别?现在它什么都没打印
  • 为什么要在标签后打印WHOLE帖子内容?
  • 为什么只打印一个标签?
  • 为什么i在循环结束时递增?

1 个答案:

答案 0 :(得分:1)

如何访问该类别?现在它什么都不打印

网站类别是哈希:

Hash
{"github issue"=>[#Jekyll:Post, #Jekyll:Post],
 "toto"=>[#Jekyll:Post, #Jekyll:Post],
 "jekyll"=>[#Jekyll:Post]}

site.categories['github issue']返回一个post数组 site.categories[0]返回一个空数组

为什么在标签后打印WHOLE帖子内容?

{% for TAG in site.tags %}中的上述原因相同,TAG是一个散列,您看到的是此散列的字符串表示形式。如果您在此标记中有两个帖子,则在打印TAG时会看到两个帖子。

要从此处获取代码名称:{{TAG.first}}

为什么只打印一个标签?

它打印两个标签

Checking the i: 0
Checking the tag: tag1
THE WHOLE POST
Checking the cat: (nothing is printed here)

Checking the i: 0
Checking the tag: 0
Checking the cat: (nothing is printed here)

这种行为显然无法预测,主要是因为您在_config.yml中声明了标签和类别。您不应该这样做,因为site.tagssite.categories是由杰基尔在发电时设置的,具体取决于您帖子中的标签和类别。从您的配置中删除此选项,仅在default front matter config或帖子中为您设置标记。

为什么i在循环结束时增加?

{% assign i = i | plus: 1 %}

请参阅liquid documentation

可能的解决方案

{% for tag in site.tags %}
  {% assign tagName = tag.first %}
  <h1>{{ tagName }}</h1>
    {% for category in site.categories %}
    <h2>{{ category.first }}</h2>
        {% for post in site.posts %}
          {% if post.tags contains tagName %}
              <h3>{{ post.title }}</h3>
          {% endif %}
        {% endfor %}
    {% endfor %}
{% endfor %}