封面默认设置
使用 封面 是您可以在网站的页面和帖子中指定配置的一种方式。设置默认布局、自定义标题或为帖子指定更精确的日期/时间,所有这些都可以添加到您的页面或帖子封面中。
通常,您会发现自己重复了很多配置选项。在每个文件中设置相同的布局,向帖子添加相同的类别或类别,等等。您甚至可以添加自定义变量,例如作者姓名,这对于您博客上的大多数帖子来说可能是相同的。
为了避免在每次创建新帖子或页面时重复此配置,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
的文件设置布局。可供您使用的不同类型包括 pages
、posts
、drafts
或您网站中的任何集合。虽然 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.md
的 layout
将设置为 foobar
(而不是 project
),author
将设置为 John Smith
(而不是 Mr. Hyde
)。