封面默认设置

使用 封面 是您可以在网站的页面和帖子中指定配置的一种方式。设置默认布局、自定义标题或为帖子指定更精确的日期/时间,所有这些都可以添加到您的页面或帖子封面中。

通常,您会发现自己重复了很多配置选项。在每个文件中设置相同的布局,向帖子添加相同的类别或类别,等等。您甚至可以添加自定义变量,例如作者姓名,这对于您博客上的大多数帖子来说可能是相同的。

为了避免在每次创建新帖子或页面时重复此配置,Jekyll 提供了一种在网站配置中设置这些默认值的方法。为此,您可以使用 _config.yml 文件中 defaults 键指定全站默认值,该文件位于项目的根目录中。

defaults 键包含一个范围/值对数组,该数组定义了应为特定文件路径设置哪些默认值,并且还可以定义该路径中的文件类型。

假设您想向网站中的所有页面和帖子添加默认布局。您需要将此内容添加到 _config.yml 文件中

defaults:
  -
    scope:
      path: "" # an empty string here means all files in the project
    values:
      layout: "default"
停止并重新运行 `jekyll serve` 命令。

_config.yml 主配置文件包含全局配置和变量定义,这些配置和变量定义在执行时读取一次。在自动重新生成期间对 _config.yml 所做的更改直到下次执行才会加载。

注意 数据文件 在自动重新生成期间会包含和重新加载。

在此,我们将 values 范围限定为存在于路径 scope 中的任何文件。由于路径设置为空字符串,因此它将应用于项目中的所有文件。您可能不想在项目中的每个文件(例如 css 文件)上设置布局,因此您还可以在 scope 键下指定 type 值。

defaults:
  -
    scope:
      path: "" # an empty string here means all files in the project
      type: "posts" # previously `post` in Jekyll 2.2.
    values:
      layout: "default"

现在,这仅会为类型为 posts 的文件设置布局。可供您使用的不同类型包括 pagespostsdrafts 或您网站中的任何集合。虽然 type 是可选的,但您必须在创建 scope/values 对时为 path 指定一个值。

如前所述,您可以为 defaults 设置多个 scope/values 对。

defaults:
  -
    scope:
      path: ""
      type: "pages"
    values:
      layout: "my-site"
  -
    scope:
      path: "projects"
      type: "pages" # previously `page` in Jekyll 2.2.
    values:
      layout: "project" # overrides previous default layout
      author: "Mr. Hyde"

使用这些默认值,所有页面都将使用 my-site 布局。如果存在,projects/ 文件夹中存在的任何 html 文件都将使用 project 布局。这些文件还将把 page.author liquid 变量 设置为 Mr. Hyde

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: ""
      type: "my_collection" # a collection in your site, in plural form
    values:
      layout: "default"

在此示例中,layout 设置为 default,位于名称为 my_collection集合 内。

Front Matter 默认值中的 Glob 模式

在匹配默认值时,还可以使用 glob 模式(目前仅限于包含 * 的模式)。例如,可以为 section 文件夹的任何子文件夹中的每个 special-page.html 设置特定布局。3.7.0

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: "section/*/special-page.html"
    values:
      layout: "specific-layout"
Glob 和性能

请注意,对路径进行 glob 处理已知会对性能产生负面影响,并且目前尚未优化,尤其是在 Windows 上。对路径进行 glob 处理会根据关联的集合目录的大小成比例地增加构建时间。

优先级

Jekyll 将应用您在 _config.yml 文件的 defaults 部分中指定的全部配置设置。您可以通过为 scope 指定更具体的路径来选择覆盖其他 scope/values 对中的设置。

您可以在上面的倒数第二个示例中看到这一点。首先,我们将默认页面布局设置为 my-site。然后,使用更具体的路径,我们将 projects/ 路径中页面的默认布局设置为 project。这可以通过在页面或帖子前置内容中设置的任何值来完成。

最后,如果您通过向 _config.yml 文件中添加 defaults 部分在网站配置中设置默认值,则可以在帖子或页面文件中覆盖这些设置。您只需在帖子或页面前置内容中指定设置即可。例如

# In _config.yml
...
defaults:
  -
    scope:
      path: "projects"
      type: "pages"
    values:
      layout: "project"
      author: "Mr. Hyde"
      category: "project"
...
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...

当网站构建时,projects/foo_project.mdlayout 将设置为 foobar(而不是 project),author 将设置为 John Smith(而不是 Mr. Hyde)。