Jekyll - 自定义yml标签的帖子数量

时间:2015-09-11 15:37:51

标签: github yaml jekyll github-pages

我正在jekyll / gh-pages网站上工作。我想建立一个侧栏,根据CUSTOM标签列出帖子数量。所以我可以使用不同的yml元素对帖子进行排序。使用标签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 %} 

但我想要的是另一个“按类型划分”的块(我们试图以不同的方式对帖子进行排序。我设置了一个topic-tag yml元素和一个`topic-tag.yml文件'

_data文件夹 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 样本帖子: https://github.com/lwasser/data-lesson-catalog/edit/gh-pages/_posts/lessons/2015-09-10_dc-R.md

来自样本帖子的相关YML

---
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元素)对帖子进行排序吗?

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

如果是这样,有关为何上述代码不起作用的任何建议?我在这里发现了另一篇帖子,询问类似的东西,但决议是使用yaml“tags”元素,这对我的用例不起作用。 非常感谢, 利亚

3 个答案:

答案 0 :(得分:0)

您可以使用categories。它们就像标签一样工作,可以用来对帖子进行排序。

答案 1 :(得分:0)

嗨,任何正在为同样的事情奋斗的人。这就是我所学到的。

标签和类别内置于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标记。

我希望这有助于某人!

答案 2 :(得分:0)

这里是我用来显示每个类别的帖子数量的代码。您可以将 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