列出所有Jekyll帖子时自动添加课程

时间:2013-04-14 11:32:33

标签: jekyll

我想按时间顺序列出所有Jekyll帖子,同一类别中的所有帖子都会有与我提供的相同的班级名称(例如cate1cate2cate3 ...)。我在很多方面尝试过,仍然无法弄清楚这一点。你能帮帮我吗?

例如,以下代码可以按时间顺序列出所有帖子,但所有链接都具有相同的cate1类。

{% for post in site.posts %}
  {% if site.categories.CATEGORY1 %}
    <a class="cate1" href="{{ post.url }}">{{ post.title }}</a>
  {% elsif site.categories.CATEGORY2 %}
    <a class="cate2" href="{{ post.url }}">{{ post.title }}</a>
  {% elsif site.categories.CATEGORY3 %}
    <a class="cate3" href="{{ post.url }}">{{ post.title }}</a>
  {% endif %}
{% endfor %}

我也试过了:

{% for post in site.posts %}
  {% for post in site.categories.CATEGORY1 %}
    <a class="cate1" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
  {% for post in site.categories.CATEGORY2 %}
    <a class="cate2" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
  {% for post in site.categories.CATEGORY3 %}
    <a class="cate3" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
{% endfor %}

这将生成每个链接13次,这是我的总帖子数量。链接顺序基于循环中类别的顺序而不是按时间顺序排列。

我也试过了:

{% for post in site.posts %}
  {% for CATEGORY1 in site.categories %}
    <a class="cate1" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
  {% for CATEGORY2 in site.categories %}
    <a class="cate2" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
  {% for CATEGORY3 in site.categories %}
    <a class="cate3" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
{% endfor %}

这将生成每个链接25次。我想这是因为我有5个类别,5 * 5 = 25。每个链接都有不同的类名(例如a_CATEGORY1_post.cate1a_CATEGORY1_post.cate2a_CATEGORY1_post.cate3)。但所有帖子都是按时间顺序排列的。

1 个答案:

答案 0 :(得分:2)

你想要另一个循环里面帖子循环如下:

{% for post in site.posts %}
  {% for cat in post.categories %}
      <a class="{{ cat }}" href="{{ post.url }}">{{ post.title }}</a>
  {% endfor %}
{% endfor %}

有关循环中可访问内容的详细信息,请参见此处:
https://github.com/mojombo/jekyll/wiki/template-data

这种方法存在两个问题:

  1. 如果您的某个帖子 没有分配类别,则不会列出。所以你可能也想检查一下。

  2. 如果将其分配到多个类别,则会多次列出相同的帖子。因此,我会使用Liquid Filters重做代码,使其像:class="cat1 cat2 cat3"一样:

    {% for post in site.posts %}
      <a class="{{ post.categories | join: ' ' }}" href="{{ post.url }}">{{ post.title }}</a>
    {% endfor %}
    
  3. 请参阅此处了解液体过滤器:
    https://github.com/shopify/liquid/wiki/liquid-for-designers

    编辑:您是说要为每个链接添加一个唯一的类而不是类别名称吗?不确定具体的含义。对于 unique ,您可以在case部分之前执行<a href声明:

      {% case condition %}
        {% when cat = 'cat1' %}
          cat = 'unique_class_1'
        {% when cat = 'cat2' %}
          cat = 'unique_class_2'
        {% else %}
          ... else ...
      {% endcase %}
    

    但在这种情况下,为什么类别类不够独特?

    编辑 Peiwin评论的示例3 - 我不建议这样做,因为它编码很差。而是使用您的jQuery使其更灵活,并使用上面的#2:

    {% for post in site.posts %}
      {% for cat in post.categories %}
        {% case condition %}
          {% when cat = 'cat1' %}
            {% assign cat_class = 'unique_class_1' %}
          {% when cat = 'cat2' %}
            {% assign cat_class = 'unique_class_2' %}
          {% else %}
            ... else ...
        {% endcase %}
      {% endfor %}
    
      <a class="{{ cat_class }}" href="{{ post.url }}">{{ post.title }}</a>
    {% endfor %}