在jekyll博客中支持标签的简单方法

rah*_*eel 45 ruby tags tagging liquid jekyll

我使用标准的jekyll安装来维护博客,一切都很顺利.除了我真的想标记我的帖子.

可以使用YAML前端标记帖子,但是如何为每个标签生成可以列出标签所有帖子的页面?

Chr*_*cht 75

这是一个在单个页面上按字母顺序排序的标签的解决方案.
它仅使用Liquid,这意味着它可以在GitHub页面上运行:

{% capture tags %}
  {% for tag in site.tags %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}

{% for tag in sortedtags %}
  <h3 id="{{ tag }}">{{ tag }}</h3>
  <ul>
  {% for post in site.tags[tag] %}
    <li><a href="{{ post.url }}">{{ post.title }}</a></li>
  {% endfor %}
  </ul>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到它.


编辑:

还有一种方法可以为没有插件的每个标签生成一个单独的页面(可以在GitHub页面上使用).

我在我的博客上有更详细的解释:
每个标签/类别与Jekyll分开页面(没有插件)

首先,您需要一个新的布局文件:

/_layouts/tagpage.html:

---
layout: default
---

<h1>{{ page.tag }}</h1>

<ul>
{% for post in site.tags[page.tag] %}
  <li>
    {{ post.date | date: "%B %d, %Y" }}: <a href="{{ post.url }}">{{ post.title }}</a>
  </li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)

使用此布局文件,您可以通过添加仅包含两行YAML前端内容的新文件来添加新标签页.

以下是jekyll标记的示例:

/tags/jekyll/index.html:

---
layout: tagpage
tag: jekyll
---
Run Code Online (Sandbox Code Playgroud)

这种方法的唯一缺点是:每次第一次使用新标签时,都必须记住为它创建一个新的双行文件.

要生成根索引文件(即链接到的标记列表/tags/jekyll/index.html等),您可以使用类似于本答案顶部的解决方案,我生成带有alphebetically sorted标签的单个页面:

{% capture tags %}
  {% for tag in site.tags %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags %}
    <a href="/tags/{{ tag }}/">{{ tag }}</a><br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这将生成如下链接列表:

<ul>
    <li><a href="/tags/.net/">.net</a></li>
    <li><a href="/tags/authentication/">authentication</a></li>
    <li><a href="/tags/backup/">backup</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案使用空格来分割标记,因此当标记包含空格时它不起作用,并且Yevgeniy Brikman的注释也适用于此处.

  • 这是一个聪明的黑客!我遇到的一个问题是我的标签中有空格,所以 `split: ' '` 会将一个标签分成许多词。为了解决这个问题,我使用了一个 `|` 字符作为分隔符而不是空格并对其进行拆分:https://gist.github.com/brikis98/e71d6c736158080968f5 (2认同)
  • @ Jwan622:我刚编辑了答案并添加了如何执行此操作的示例代码. (2认同)

Bri*_*per 14

这个要点将为您生成每个类别的页面:https://gist.github.com/524748

它使用了一个Jekyll Generator插件,还有一个Page子类.


Bit*_*oet 8

看看使用jekyll的网站.有一些自定义分叉已经实现了标记功能,希望也可以按照你想要的方式:-)


Mat*_*att 5

我有同样的问题,偶然发现了这个问题:http://gist.github.com/143571.

这是一个生成标签列表的rake任务.我稍微修改了一下,我的版本是:http: //github.com/mattfoster/mattfoster.github.com/blob/master/Rakefile.

虽然这不会给你一个每个标签的页面,你可以使用锚点,这是一半!