页面头部参数 Front Matter

Front Matter 这个词在静态博客流行起来后曝光增多,目前没有没有较为官方或者受多数人认可的中文称呼,大家一般都会直接使用原英文 Front Matter 来形容。

Front Matter 的功能就是在页面头部使用 YAML 格式配置关于页面的基础参数,这些参数往往都是应用在主题模板上所以也叫“前端参数”,Jekyll 在构建时会先对 Front Matter 进行处理,所以也叫“前端事件(事项)”,一般页面和文章都会包含两个基础的页面头部参数 layout(页面模板)和 title(页面标题),Front Matter 主要用于 .md 文件,在 .html 文件中也可以使用。这两个参数在绝大多数静态博客都是约定俗成的。下面是一个基本示例:

---
layout: post
title: 像在本地写 Markdown 文档一样写博客
---

在两行 --- 三段虚线之间,你可以设定你页面的变量和值,可以使用预设变量,甚至可以创建自定义变量(请可参照下文)。页面添加好变量后,然后可通过 Liquid 标签使用这些变量构建时会解析对应值或内容,这些变量可以在主题模板或当前页面使用(当然如果在别的地方通过 Liquid 获取当前页面内容时也可以使用这些变量)。

UTF-8 字符编码注意事项

如果你使用 UTF-8 编码,请确保文件中不存在 BOM 头,否则运行 Jekyll 会发生很多糟糕的错误。如果你是在 Windows 上运行 Jekyll请特别注意这个问题。
(目前大多数情况,我们一般都是使用 UTF-8 编码,打开 VS code 之类的代码编辑器,在窗口右下角可以看到当前文件的字符编码)

页面头部参数 Front Matter 中的变量是可选的

如果你想使用Liquid 标签和变量(variables),但是不想在页面头部参数 Front Matter 中,可以直接留空。
两行 `---` 三段虚线中没有任何内容,Jekyll 仍然会处理你的文件,这对于 CSS 和 RSS 文件也很有用。

预设的全局变量

你可以在页面或者文章的页面头部参数中使用这些预设的全局变量。

变量 介绍

layout

设置 layout 变量前,请确认填写的值是否在根目录下 _layouts 文件夹中有对应文件名的模板文件。比如配置layout: xiangce,那就需要有 _layouts/xiangce.html` 这个文件,不然生成网站时会报错。

  • 使用 null 将会生成当前文件对应格式的文件,而不会根据主题模板文件生成网页。如果文章或者文件的 页面头部参数默认值 中配置了布局模板,则此选项会被覆盖。
  • 从 3.5.0 版本开始,无论有无使用 none 文章或者文件都会生成一个文件,而不是要主题模板文件。在页面布局中使用 none 值,Jekyll 会尝试使用名位 “none” 的主题模板文件。

permalink

如果不希望当前使用全局的默认永久链接设置(/year/month/day/title.html),可配置这个变量修改这个页面的 URL(永久链接),如/blog/diy/

published

如果不想在生成网站的时显示这个页面,请将值设置为 `false`。
如果未设置该变量,将使用默认值 `true`,生成网站时则会显示这个页面。

显示未发布的页面和文章(草稿)

如果需要预览未发布的页面,可以在运行 `jekyll serve` 命令或 `jekyll build` 命令时带上 `--unpublished` 参数。
Jekyll 专为博客文章定制了便捷的草稿 drafts功能。

自定义变量 Variables

你可以在页面头部参数中添加自定义变量,可以通过 Liquid 读取。 如下示例,添加了一个 food 的变量,页面构建后会显示变量的值(Pizza):

---
food: Pizza
---

<h1>{{ page.food }}</h1>

文章中预设的变量

在文章类型的页面头部参数直接添加即可,这些都是可以直接使用(大多数主题模板都有用到这些变量)。

变量 介绍

date

在文章页面头部参数添加日期时间会覆盖文章文件名上的日期。文章的日期时间变量会影响文章的排序。
默认的日期格式为:YYYY-MM-DD HH:MM:SS +/-TTTT,依次为:年、月、日、小时、分钟、秒和时区偏移量(年月日之外是可选的,可不写)。在生成网站的时候,你可以通过修改主题目标中日期变量从而改变日期的格式。

category

categories

变量名称的两种写法都可以使用(二选一),你可以给当前文章制定所属的一个分类或者多个分类,而不是将文章放在不同的文件夹里面。可以使用 YAML list 或者在中括号中使用英文逗号分隔多个标签(category: [分类1, 分类2, 分类3])。
如果你的主题模板包含分类列表,那么生成网站后在文章页面点击分类名称可以打开分类页面。

tags

和「分类」类似,一篇文章可以添加一个或多个「标签」(tags)。和「分类」一样,可以使用 YAML list 或者英文逗号分隔多个标签。

设定默认值 避免重复配置

如果你大多数页面的 front matter 某个变量都使用同一个值时,你可以在 `_config.yml` 文件中设定默认值,避免繁琐的在每个页面配置重复的变量。
如果某个页面不需要使用默认值时可以在内容的 front matter 中单独配置,这样可以覆盖 `_config.yml` 文件中的默认值。