Jekyll & Liquid:如何输出带有文章数量的分类列表?

15

我有些困惑,找不到正确的方法。

我想输出一个类别列表,显示每个类别中帖子数量。

我已经做到这一步了:https://paste.xinu.at/dOLtod/

但是我从未成功地得到过真正的计数。我尝试了很多方法,比如遍历每篇文章并检查每个类别是否等于 {{ category | first }}。

以下是没有计数的代码:

<ul class="dropdown-menu">
    {% for category in site.categories %}
        <li class="camelize_me">
            <a href="/tags/{{category | first}}/">
                {{category | first }}
                <span class="badge">
                <!-- Post count here -->
                </span>
            </a>
        </li>
    {% endfor %} 
</ul>

有人有办法完成这件事吗?

3个回答

24

我写了一段代码片段,不仅可以显示每个分类中的文章计数,还可以导航到单击的特定分类的帖子。希望你觉得有帮助:

<ul class="tag-box inline">
{% assign tags_list = site.categories %}  
  {% if tags_list.first[0] == null %}
    {% for tag in tags_list %} 
      <li><a href="#{{ tag }}">{{ tag | capitalize }} <span>{{ site.tags[tag].size }}</span></a></li>
    {% endfor %}
  {% else %}
    {% for tag in tags_list %} 
      <li><a href="#{{ tag[0] }}">{{ tag[0] | capitalize }} <span>{{ tag[1].size }}</span></a></li>
    {% endfor %}
  {% endif %}
{% assign tags_list = nil %}
</ul>

{% for tag in site.categories %} 
  <h2 id="{{ tag[0] }}">{{ tag[0] | capitalize }}</h2>
  <ul class="post-list">
    {% assign pages_list = tag[1] %}  
    {% for post in pages_list %}
      {% if post.title != null %}
      {% if group == null or group == post.group %}
      <li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time></a></li>
      {% endif %}
      {% endif %}
    {% endfor %}
    {% assign pages_list = nil %}
    {% assign group = nil %}
  </ul>
{% endfor %}

有没有办法对分类进行排序?我尝试了 {% assign tags_list = site.categories | sort:"title" %} 但没有成功。 - Diogo Moreira
你能在代码中添加一些注释吗?有点难以理解。 - blkpingu

16
解决方案: {{ category | last }} 包含了所有我的帖子,所以 {{ category | last | size }} 显示了数量。我在IRC上得到了帮助。 :)

太好了!我在Liquid Document中没有找到任何解决方案。但是我在这里找到了!谢谢你! - shen

2

对Hossain的答案进行了增量改进,对类别进行了排序。已在Jekyll 3.3.1测试通过:

<h1 class='tag'>Blog Posts Sorted By Category</h1>
{% assign sorted_categories = site.categories | sort %}
{% for tag in sorted_categories %}
  <h2 class='tag' id="{{ tag[0] }}">{{ tag[0] | capitalize }}</h2>
  <ul class="post-list">
    {% assign pages_list = tag[1] %}
    {% for post in pages_list %}
      {% if post.title != null %}
      {% if group == null or group == post.group %}
      <li><a href="{{ site.url }}{{ post.url }}">
          <span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%B %d, %Y" }}</time></span>
          &bull;
          {{ post.title }}
        </a></li>
      {% endif %}
      {% endif %}
    {% endfor %}
    {% assign pages_list = nil %}
    {% assign group = nil %}
  </ul>
{% endfor %}

我认为有必要提到这个函数进行的是区分大小写的排序,大写字母优先于小写字母。因此,如果你有类别 Apple, banana 和 Zebra,那么它将被排序为 Apple, Zebra, banana,这可能不是你想要的结果。 - kimbaudi
这是真的。我注意在我的标签中使用所需的大写形式,例如:AWS、AI和所有其他标签都是大写字母。效果很好! - Mike Slinn
这个以前是可以工作的,但现在我得到了以下错误信息:Liquid Warning: Liquid syntax error (line 2): Unexpected character { in "{{site.categories | sort {|left, right| left[0] <=> right[0]} }}" in blog/index.html - Mike Slinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接