在 Jekyll 中,我们可以将多个 collections 分组在同一个文件夹中吗?

In Jekyll, can we group multiple collections inside the same folder?

在 config.yml 中,我这样定义 collections:

collections:
  music:
    output: false
  dancing:
    output: false

问题是我会有很多 collections,它们会弄乱我的根 Jekyll 文件夹。

有没有办法将所有 collections 分组到一个文件夹中,例如命名为 _collections?

所以,我会:

_collections
     _dancing
     _music
     ....

答案是否定的。您的 collections 文件夹必须位于根文件夹的根目录下。

即使你命名你在 _collections/_music 文件夹中创建一个 collection,并像这样设置它:

collections:

  collections/_music folder:
    output: true

由于路径清理过程,Jekyll 最终在 _collections_music folder 中寻找您的 collection(没有任何斜线)。

参见 collection.rb, site.rb and jekyll.rb

中的 jekyll 代码

没有什么能阻止您使用 collection 中的子文件夹。 (注意:这不是您问题的答案,而是一种可能的解决方法)

因此,作为一种解决方法,您可以只使用一个 collection:例如说 _arts 并组织您的文件夹,例如:

_arts
     dancing
     music
     concerts
     .....

要单独列出它们,您可以使用:

  1. 文件中的 FrontMatter 变量 category: dancing 当你有一个输出时 并检查它是否有一个仅跳舞的列表。

    {% for project in site.arts %}
    {% if project.category == 'dancing' %}
    ....
    {% endif %}
    {% endfor %}
    
  2. 或者在没有输出时检查路径collection

    {% for project in site.arts %}
    {% if project.url contains 'dancing' %}
    ....
    {% endif %}
    {% endfor %}
    

如果您的内部有成百上千个项目,这可能会减慢您的构建速度。

由于 this issue 已合并,现在可以实现了。

User configures as:

collections_dir: my_collections

Then we look in my_collections/_pizza for the pizza collection, and my_collections/_lasagna for the lasagna collection.

这个现在可以实现(我是运行 Jekyll 3.7.2,我不确定这是在哪个版本实现的)。

操作方法如下:在您的 _config.yml 中,您可以定义 collection 以及 collection 的文件夹。让我们看一下我正在处理的客户站点上的示例:

collections:
  events:
    output: true
  work:
    output: true
  jobs:
    output: true
  cases:
    output: true
    permalink: /work/:name
collections_dir: pages

collections_dir: [your_folder_here] 会告诉 Jekyll 查看该文件夹 collections。我在开发中的文件夹结构如下:

pages/
  ...
  _events/
  _work/
  _jobs/
  _cases/

并且在编译后的站点中是这样的:

...
events/
jobs/
work/ (contains both "work" and "cases" collections)

还有一件事没有被问到,但我发现它很有用,那就是你能够将 不同的 collection 输出到同一个文件夹中 .就我而言,我有一个客户网站,上面有两种类型的工作样本:客户案例和一般示例。我们想将它们分开以便更好地维护,但也将它们显示在同一文件夹中。为此,您可以简单地为 collection 定义一个永久链接。在我们的例子中,我们将案例的永久链接放在 work 文件夹中 (permalink: /work/:name).

希望对您有所帮助!

这也存在于 Jekyll documentation