页面头部参数默认值 Front Matter Defaults
使用页面头部参数(front matter)可以指定站点页面和文章配置。可以在页面或文章的页面头部参数中设置默认布局、自定义标题,或指定更精确的日期/时间等信息。
有时候有些配置选项需要重复设置,比如在每个文件中设置相同的布局,为文章添加相同的分类(或多个分类)等。以及其他添加的自定义变量,比如博客中大多数文章都有同一个作者。
为了避免每次创建新文章或页面时都重复设置,Jekyll 提供了在站点配置中对这些页面头部参数(front matter)设定默认值的方法。您可以在项目根目录下的 _config.yml
文件中,通过使用 defaults
键来指定全站的默认设置。
defaults
键包含一个 scope/values 对数组,用于设定特定文件路径下的默认配置,可以选择性设定默认设置。
如果您想要为站点中所有的页面和文章添加一个默认布局,您可以在 _config.yml
文件中加入如下内容:
defaults:
-
scope:
path: "" # path为空时,表示所有文件。
values:
layout: "default"
停止 `jekyll serve` 命令并重新运行该命令。
_config.yml
是主配置文件,包含全局配置和变量定义,这些配置只在执行时读取一次。在自动重新生成期间对 _config.yml
的更改需要重新执行命令才能生效。
注意,在自动重新生成期间,数据文件 会被重新处理。
values
适用的范围为 scope
定义路径(path
)中的任何文件。如果路径设置为空字符串,它会处理 Jekyll 项目中的所有文件。可能我们并不想对每个文件(例如 CSS 文件)设置布局,所以需要在 scope
键下指定一个 type
值来限制处理的范围。
defaults:
-
scope:
path: "" # 如果为空表示所有文件。
type: "posts" # Jekyll 2.2和以下版本使用`post`。
values:
layout: "default"
现在,只对类型为 posts
的文件设置布局。
可用的类型有 pages
(页面)、posts
(文章)、drafts
(草稿)或站点中的任何集合。虽然 type
是可选的,但在创建 scope/values
时,必须为 path
指定一个值。
我们可以给 defaults
设置多个 scope
和 values
。
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # Jekyll 2.2和以下版本使用`page`。 previously `page` in Jekyll 2.2.
values:
layout: "project" # 将覆盖之前的默认布局。 overrides previous default layout
author: "Jekylldo"
根据这个配置,所有页面都会使用 my-site
布局。projects/
文件夹中的所有 HTML 文件都会使用 project
布局,并且将 page.author
liquid 变量 设置为 Jekylldo
。
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
的 集合(collection) 中。
Front Matter(页面头部参数)默认值中的通配模式
在匹配默认值时,也可以使用通配符模式(目前仅支持包含 *
的模式)。例如,可以为 section
文件夹任意子目录中的每个 special-page.html
设置特定的布局。3.7.0
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
通配模式与性能
请注意,使用路径通配符已知会对性能产生负面影响,目前尚未进行优化,尤其是在 Windows 系统中更为明显。 路径通配将根据相关集合目录的大小,成比例地增加构建时间。
优先级
Jekyll 会应用你在 _config.yml
文件中 defaults
部分指定的所有配置设置。你可以通过为 scope
指定更具体的路径,来覆盖其他范围/值对中的设置。
你可以在上面倒数第二个示例中看到这一点。首先,我们将默认页面布局设置为 my-site
。接着,通过更具体的路径,我们将 projects/
路径下页面的默认布局设置为 project
。这种方式可以应用于你在页面或文章 Front Matter 中设置的任何值。
最后,如果你在站点配置中通过 _config.yml
文件添加了 defaults
部分设置了默认值,你可以在具体的文章或页面文件中进行覆盖。你只需要在文章或页面的 Front Matter 中指定这些设置。例如:
# 在 _config.yml 中
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Jekylldo"
category: "project"
...
# 在 projects/foo_project.md 中
---
author: "John Smith"
layout: "foobar"
---
文章内容写在这里...
构建站点时,projects/foo_project.md
文件的 layout
会被设置为 foobar
,而不是 project
,author
会被设置为 John Smith
,而不是 Jekylldo
。