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.
我正在开发一个 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.