Jekyll——自定义 yml 标签的帖子数

Jekyll -- number of posts by custom yml tags

我正在开发一个 jekyll / gh-pages 站点。我想建立一个边栏,根据 CUSTOM 标签列出 post 的数量。所以我可以使用不同的 yml 元素对 posts 进行排序。使用标签 yml 元素和此代码

效果很好
<h3>Activities By Topic</h3>
{% for tag in site.tags %}
{% assign t = tag | first %}
  {% for atag in site.data.tags %}
    {% if atag.slug == t %}
      <h5><a href="{{ site.baseurl }}/{{ atag.slug }}">{{ atag.name }}  
    {% endif %}
  {% endfor %} 
      ({{ tag | last | size }}) 
     </a></h5>
{% endfor %} 

但我想要的是另一个 "Activities by Type" 块(我们试图以不同的方式对 post 进行排序。我设置了一个 topic-tag yml 元素和一个 `主题-tag.yml 文件'

_数据文件夹 https://github.com/lwasser/data-lesson-catalog/blob/gh-pages/_data/topic-tags.yml 组织文件夹: https://github.com/lwasser/data-lesson-catalog/tree/gh-pages/org/topic-tag 示例 post: https://github.com/lwasser/data-lesson-catalog/edit/gh-pages/_posts/lessons/2015-09-10_dc-R.md

示例中的相关 YML post

---
layout: post
catalog-entry-type: lesson
title: Data Carpentry R for Ecology
topic-tag: ["Analysis", "Vizualization"] 
---

无效代码:

<h3>Data Activities By Topic Tag</h3>
{% for tag in site.topic-tag %}
{% assign t = tag | first %}

{% for atag in site.data.topic-tags %}
{% if atag.slug == t %}
  <h5><a href="{{ site.baseurl }}/{{ atag.slug }}">{{ atag.name }}</h5>
{% endif %}
{% endfor %} 
      ({{ tag | last | size }}) 
{% endfor %}

我可以按其他标签(不仅仅是标签 yml 元素)对 post 进行排序吗?

我想要的输出是这样的: 分析 (2) 可视化 (3)

如果是这样,关于为什么上面的代码不起作用有什么建议吗?我在这里发现了另一个 post 询问类似的问题,但解决方案是使用 yaml "tags" 元素,这对我的用例不起作用。 非常感谢, 利亚

您可以使用 categories。它们就像标签一样工作,可以作为另一种对帖子进行排序的方式。

你好,任何正在为同样的事情而苦苦挣扎的人。这是我学到的。

标签和类别内置于 jekyll 版本中。因此,您可以调用 site.tags 或 site.categories 而无需向您的配置文件添加任何内容。您创建的其他自定义标签,如 topic-tags,jekyl 本身并不理解为可以在站点级别调用的变量。我的解决方法——使用计数器按自定义变量计算帖子数。代码看起来像这样

{% for member in site.data.topic-tags %}
  {% assign counter = 0 %}
  <!-- this code counts the number of posts associated with the member -->
  {% for post in site.posts %}
    {% if post.topic-tag contains member.slug %}
    {% assign counter = counter | plus: 1 %}
    {% endif %}
  {% endfor %}  
  <h5><a href="{{ site.baseurl }}/topic-tag/{{ member.slug }}">{{ member.name }} ({{ counter }})</h5>

{% endfor %}

虽然它正在查看所有帖子以查看它是否包含 yaml 中的 member 标记,但它的工作原理非常有用。

我希望这对某人有所帮助!

这里是我用来显示每个类别 post 数量的代码。您可以将 site.categories 更改为 site.tags 以按标签显示它们。

<h2 class="question">Topics ({{ site.posts | size }} total)</h2>
<ul class="topics">
{% capture tags %}
  {% for tag in site.categories %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags %}
  <li class="topic-header"><b>{{ tag }} ({{ site.categories[tag] | size }} topics)</b>
    <ul class='subnavlist'>
  {% for post in site.categories[tag] %}
      <li class='recipe'>
        <a href="/{{ site.github.project_title }}{{ post.url }}">{{ post.title }}</a>
      </li>
  {% endfor %}
    </ul>
  </li>
{% endfor %}
</ul>

在行动中检查它 here.