2

我是第一次用 Eleventy 建立一个网站,即使我已经和 Liquid 合作了一段时间,我就是无法破解这个。

我想尽可能地简化架构。这就是为什么我将我的集合分配给变量的原因:

{% assign blogposts = collections.posts %}

所以稍后在网站上我可以写一个非常简短和甜蜜的:

{% for post in blogposts %}...{% endfor %} 

而不是在文件中分配它上面的集合。

现在这是我的问题:

我很想过滤掉标记为草稿的帖子(在 frontmatter 中使用草稿:true)。我以为我可以像其中之一那样做到这一点(我已经尝试过......)

{% assign blogposts = collections.posts | draft: false %}
{% assign blogposts = collections.posts | where: draft, false %}
{% assign blogposts = collections.posts | where: data.draft, false %}
{% assign blogposts = collections.posts_nl | where: "draft", "false" %}

有谁知道我怎么能做到这一点?不幸的是,我觉得 Eleventy 中使用的液体版本是旧版本,而我能找到的文档似乎从来没有解决我如何做到这一点。我真的很感激一些帮助!:)

4

1 回答 1

2

您可以使用配置 API在文件中创建过滤.eleventy.js后的集合,而不是过滤模板中的集合。这应该有效:

// .eleventy.js
eleventyConfig.addCollection('posts', collections => {
  // get all posts by tag 'post'
  return collections.getFilteredByTag('post')
    // exclude all drafts
    .filter(post => !Boolean(post.data.draft))
});

如果您同时需要过滤后的帖子列表和完整列表,您还可以使用不同的别名:

// .eleventy.js
eleventyConfig.addCollection('posts', collections => {
  return collections.getFilteredByTag('post');
});
eleventyConfig.addCollection('published_posts', collections => {
  // get all posts by tag 'post'
  return collections.getFilteredByTag('post')
    // exclude all drafts
    .filter(post => !Boolean(post.data.draft))
});
于 2020-11-16T09:46:31.770 回答