按标签过滤帖子

时间:2013-01-05 23:22:04

标签: filter yaml jekyll octopress

我有一个新的Jekyll / Octopress网站。

我进行了一些自定义:我将category_list_tag.rb文件(来自Dan Watson)添加到plugins文件夹以创建类别,然后我复制了category_generator.rb和category_list_tag.rb以创建tag_generator.rb和tag_list_tag。 RB。

我现在有多种方法可以将帖子“组合”在一起,而在侧边栏中,这一切都很有效。

在每篇帖子的底部,我现在想要显示与相关帖子具有相同标签的帖子列表。

我仍然是一个新手并且学习所有这些,并且设法破解了以下内容:

在YAML Front Matter中,我有以下内容:

---
title: "Preface"
date: 2012-09-02 18:30
layout: post

categories:
- Section 1

tags:
- Author
- About
- Publisher
---

在一个包含文件中,我在每个帖子的底部都有以下内容:

<ul class="inline">
  {% for tag in site.tags %} 
    <li><a href="{{ url_root }}#{{ tag[0] }}-ref">{{ tag[0] }} <span>({{ tag[1].size }})</span></a></li>
  {% endfor %}
</ul>

<ul class="posts inline">
  {% for tag in site.tags %}
  <h5 id="{{ tag[0] }}-ref">{{ tag[0] }}</h5>

  {% for post in tag[1] %}
    <li><a href="{{ post.url }}" title="{{ post.title }}">{{ post.title }}</a></li>
  {% endfor %}

  {% endfor %}
</ul>

这当然会显示所有标签列出的所有帖子,这很好,但不是我想要的。

如何重写此内容,以便在帖子末尾列出带有SAME标记的帖子作为我的帖子?

这真让我烦恼,我似乎无法正确思考。

更新:我已通过以上代码片段的以下更改解决了部分问题:

{% for tag in page.tags %}
<h5 id="{{ tag }}-ref">{{ tag }}</h5>
  {% for post in site.posts reversed %}
  <li><a href="{{ post.url }}" title="{{ post.title }}">{{ post.title }}</a></li>
  {% endfor %}
{% endfor %}

然而它不太正确......标签标题列出了与每个帖子相关联的标签,这正是我想要的,但在每个标签标题下,列出了所有帖子,而不仅仅是那些与该标签关联的帖子。嗯。

如果你能指出我正确的方向,请提前致谢。

1 个答案:

答案 0 :(得分:3)

嗯,你可以尝试这些方面的东西:

{% for tag in page.tags %}
  <h5 id="{{ tag }}-ref">{{ tag }}</h5>

  {% for post in site.posts reversed %}

    {% if post.tags contains tag %}
      <li><a href="{{ post.url }}" title="{{ post.title }}">{{ post.title }}</a></li>
    {% endif %}

  {% endfor %}

{% endfor %}

它将验证标签是否存在于帖子的标签数组中。如果是,则会打印<li>...</li>部分。

希望有所帮助! :)