任何只要包含 YAML 头信息(Front Matter)的文件在 Jekyll 中都能被当做一个特殊的文件来处理。头信息必须在文件的开始部分,并且需要按照 YAML 的格式写在两行三虚线之间。下面是一个基本的例子:
---
layout: post
title: Blogging Like a Hacker
---
在这两行的三虚线之间,你可以设置预定义的变量(下面这个例子可以作为参考),甚至创建一个你自己定义的变量。这样在接下来的文件和任意模板中或者在包含这些页面或博客的模板中都可以通过使用 Liquid 标签来访问这些变量。
任何有 YAML 头信息的文件都是Jekyll要处理的对象。如果你想使用 Liquid 标签和变量但在头信息中又不需要任何定义,那你就让头信息空着!在头信息为空的情况下,Jekyll 仍然能够处理文件。(这对于一些像 CSS 和 RSS 的文件非常有用)
预定义的全局变量
变量名称 | 描述 |
---|---|
layout | 如果设置的话,会指定使用该模板文件。指定模板文件时候不需要文件扩展名。模板文件必须放在 _layouts 目录下。 |
permalink | 如果你需要让你发布的博客的 URL 地址不同于默认值 /year/month/day/title.html,那你就设置这个变量,然后变量值就会作为最终的 URL 地址。 |
published | 如果你不想在站点生成后展示某篇特定的博文,那么就设置(该博文的)该变量为 false。 |
自定义变量
在头信息中没有预先定义的任何变量都可以在数据转换中通过 Liquid 模板被调用,当然也可以在同头信息中自定义数组,对象,长文本等等,YAML语法可以参考这里。例如,如果你设置一个 title 变量,然后你就可以在你的模板中使用这个 title 变量来设置页面的标题(title),调用方法{% raw %}{{ page.title }}:{% endraw %}
<!DOCTYPE HTML>
<html>
<head>
<title>{{ page.title }}</title>
</head>
<body>
...
在文章中预定义的变量
变量名称 | 描述 |
---|---|
date | 这里的日期会覆盖文章名字中的日期。这样就可以用来保障文章排序的正确。日期的具体格式为YYYY-MM-DD HH:MM:SS +/-TTTT;时,分,秒和时区都是可选的。 |
category categories | 除过将博客文章放在某个文件夹下面外,你还可以指定博客的一个或者多个分类属性。这样当你的站点生成后,这些文章就可以根据这些分类来阅读。categories 可以通过 YAML list,或者以逗号隔开的字符串指定。 |
tags | 类似分类 categories,一篇文章也可以给它增加一个或者多个标签。同样,tags 可以通过 YAML 列表或者以逗号隔开的字符串指定。 |
例如在此博客文章的头信息中设置
---
categories: [Jekyll,教程]
tags: [jekyll, Github Pages,头信息,Front Matter]
---
如图:在侧边导航栏的分类中就能看到此篇文章所属的两级分类Jekyll->教程,同时设置的标签在相关页面或显示栏也能看到,同时也可以点击标签找到文章。
头信息默认值
通过使用 YAML 头信息可以指定站点的页面和文章的配置。设置一些东西例如布局或者自定义标题,亦或是给文章指定一个更精确的日期/时间,这都可以往页面或文章的头信息添加数据来实现。
很多时候,你会发现你在重复填写很多配置项。在每个文件里设置相同的布局,对每篇文章添加相同的分类,等等。你甚至可能添加自定义变量,如作者名,这可能对你博客上大部分的文章来说是相同的。
Jekyll 提供了一个方法在站点配置中设置这些默认值,而不是在每次创建一个新的文章或页面重复此配置。要做到这一点,你可以在项目根目录下的 _config.yml 文件里设置 defaults 的值指定全站范围的默认值。
defaults 保存一个范围/值的对的数组,这定义了哪些默认值要设置到一个特定的文件路径下的文件,或者可选的,在该路径下指定 的文件类型的文件。
假设您想添加一个默认的布局给站点中的所有页面和文章。 你要将这添加到你的 _config.yml 文件:
defaults:
-
scope:
path: "" # 一个空的字符串代表项目中所有的文件
values:
layout: "default"
请重新运行命令:
jekyll serve
主要配置文件 _config.yml 包括一些在运行时一次性读入的全局配置和变量定义, 在自动生成的过程中并不会重新加载 _config.yml 文件所发生的改变,除非重新运行。
注意 Data Files 包括在自动生成范围内,可以在更改后自动重新加载。
{: .prompt-info }
在这里,我们把 values 应用给 scope 路径里的所有文件。因为路径被设为空字符串,它将会应用到你项目里的全部文件。你可能不想给项目在的每个文件都设置一个布局,例如 css 文件,所以你可以在 scope 下指定 type 的值。
defaults:
-
scope:
path: "" # 一个空的字符串代表项目中所有的文件
type: "posts" # 以前的 `post`, 在 Jekyll 2.2 里。
values:
layout: "default"
现在,这只会给类型是 posts 的文件设置默认布局。你可以使用的不同的类型分别是 pages , posts , drafts 或者其他你站点中的集合。当创建一个范围/值的对,如果选择了 type,你必须指定一个值给 path 。
正如前面所提到的,您可以给 defaults 设置多个范围/值的对。
defaults:
-
scope:
path: ""
type: "posts"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # 以前的 `page`, 在 Jekyll 2.2 里。
values:
layout: "project" # 覆盖之前的默认布局
author: "Mr. Hyde"
有了这些默认值,所有的文章都会使用 my-site 布局。任何在 projects/ 文件夹下的 html 文件会使用 project 布局。这些文件也会拥有值为 Mr. Hyde 的 page.author 这一 liquid 变量,同时这些页面的类别被设为 project 。