Jekyll - 获取多个类别的所有帖子

时间:2014-04-14 02:15:51

标签: jekyll liquid

我想遍历所有分配了类别“foo”和类别“bar”的帖子。

{% for post in site.categories.foo and in site.categories.bar %}

这可能吗?

在我的情况下,“foo”作为“bar”的“父级”类别...... /foo/bar/_posts

由于

3 个答案:

答案 0 :(得分:1)

完全有可能:遍历所有帖子,然后选择想要的帖子:

{% for post in site.posts %}
    {% if post.categories contains "foo" or post.categories contains "bar" %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
{% endfor %}

答案 1 :(得分:1)

您可以按第一个标记进行过滤,然后查找第二个(以及第三个,第四个,第五个...)标记,而不是查看每个帖子并与匹配,而不是查看每个帖子:

{% for post in site.categories.fizz%}
    {% if post.categories contains "buzz" and post.categories contains "bang" %}
         <!--post has categories fizz AND buzz AND bang-->
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
{% endfor %}

这比迭代每篇帖子更有效率,它设置了 and 关系,而不是 or 关系

答案 2 :(得分:0)

在 Jekyll 中使用 Where 表达式过滤器。

<块引用>

Jekyll Liquid Filter Docs

哪里表达, 选择数组中表达式为真的所有对象。 3.2.0

{{ site.members | where_exp:"item", "item.projects contains 'foo'" }}

所以在我的网站上我做了:

_includes/clippings.html
...
{% capture _filter %}item.tags contains '{{ include.tag }}'{% endcapture %}

{% for clip in site.clippings | where_exp: 'item', _filter %}
  {{ clip.do_stuff }}
  # more html and stuff
{ endfor }
{% include clippings.html tag='foo' %}

在这种情况下,我需要动态指定过滤器标签。而剪报只是像帖子一样的集合。

如果您想通过多个静态标签进行过滤,您可以执行以下操作:

{% for post in site.posts | where_exp: 'item', "item.tags contains 'foo'" | where_exp: 'item', "item.tags contains 'bar'" %}
  {{ post.do_stuff }}
{ endfor }

如果你想要做多个动态过滤器标签,那么你需要做一些类似于我上面做的捕获的东西。

我没有测试过这个,但它应该通过任意数量的过滤器标签过滤帖子。


{% assign posts = site.posts %}
{% filter_tags = 'foo, bar, buzz' | slipt: ', ' %}

{% for tag in filter_tags %}
  {% capture _filter %}item.tags contains '{{ tag }}'{% endcapture %}
  {% assign posts = posts | where_exp: 'items', _filter %}
{% endfor %}

{% for post in posts %}
  {{ post.do_stuff }}
{% endfor %}

然而,在这一点上循环整个事情并检查每个帖子可能会更有效。