0

我想按时间顺序列出所有 Jekyll 帖子,并且同一类别中的所有帖子都将具有与我给出的相同的类名(例如cate1,,cate2... cate3)。我已经尝试了很多方法,仍然无法解决这个问题。你能帮我吗?

例如,以下代码可以按时间顺序列出所有帖子,但所有链接都将具有相同的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.cate1, a_CATEGORY1_post.cate2, a_CATEGORY1_post.cate3)。但所有帖子都是按时间顺序排列的。

4

1 回答 1

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 %}
    

液体过滤器见这里:
https ://github.com/shopify/liquid/wiki/liquid-for-designers

编辑:你的意思是你想为每个链接添加一个唯一的类而不是类别名称?不知道你说的具体是什么意思。对于独特的,您可以在零件之前做一个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 %}
于 2013-04-14T17:44:09.823 回答