除了Jekyll提供的 built-in variables 外,您还可以指定自己的自定义数据,这些数据可以通过 Liquid templating system 访问。
Jekyll支持从_data
目录中的YAML, JSON, CSV, 以及 TSV 文件加载数据。请注意,CSV和TSV文件必须包含一个标题行。
这个强大的功能使您可以避免模板中的重复,并在不更改_config.yml
的情况下设置特定于站点的选项。
插件/主题还可以利用数据文件来设置配置变量。
The Data Folder
_data
文件夹是您可以存储额外数据的地方,供Jekyll在生成站点时使用。这些文件必须是YAML、JSON、TSV或CSV文件(使用 .yml
, .yaml
, .json
, .tsv
, 或 .csv
扩展名),并且可以通过site.data
访问。
Example: List of members
以下是使用数据文件避免在Jekyll模板中复制粘贴大块代码的基本示例:
在 _data/members.yml
:
- name: Eric Mill
github: konklone
- name: Parker Moore
github: parkr
- name: Liu Fengyun
github: liufengyun
或 _data/members.csv
:
name,github
Eric Mill,konklone
Parker Moore,parkr
Liu Fengyun,liufengyun
这些数据可以通过 site.data.members
访问(请注意,文件的基本名称决定了变量名,因此应避免在同一目录中使用具有相同基本名称但不同扩展名的数据文件)。
现在可以在模板中渲染成员列表:
<ul>
{% for member in site.data.members %}
<li>
<a href="https://github.com/{{ member.github }}">
{{ member.name }}
</a>
</li>
{% endfor %}
</ul>
Subfolders
数据文件也可以放置在 _data
文件夹的子文件夹中。每个文件夹级别都将添加到变量的命名空间中。下面的示例显示了如何在 orgs
文件夹下的文件中单独定义GitHub组织:
在 _data/orgs/jekyll.yml
中:
username: jekyll
name: Jekyll
members:
- name: Tom Preston-Werner
github: mojombo
- name: Parker Moore
github: parkr
在 _data/orgs/doeorg.yml
:
username: doeorg
name: Doe Org
members:
- name: John Doe
github: jdoe
然后可以通过 site.data.orgs
访问这些组织,后面跟上文件名:
<ul>
{% for org_hash in site.data.orgs %}
{% assign org = org_hash[1] %}
<li>
<a href="https://github.com/{{ org.username }}">
{{ org.name }}
</a>
({{ org.members | size }} members)
</li>
{% endfor %}
</ul>
Example: Accessing a specific author
页面和文章也可以访问特定的数据项。以下示例显示了如何访问特定项目:
_data/people.yml
:
dave:
name: David Smith
twitter: DavidSilvaSmith
然后,作者可以被指定为文章 front matter 中的页面变量:
---
title: sample post
author: dave
---
{% assign author = site.data.people[page.author] %}
<a rel="author"
href="https://twitter.com/{{ author.twitter }}"
title="{{ author.name }}">
{{ author.name }}
</a>
有关如何为您的网站构建强大导航的信息(尤其是如果您有文档网站或其他类型的Jekyll网站,需要组织大量页面),请参阅导航。
CSV/TSV Parse Options
Ruby解析CSV和TSV文件的方式可以使用 csv_reader
和 tsv_reader
配置选项进行自定义。每个配置’键"公开相同的选项:
converters
:解析文件时应该使用什么 CSV converters 。可用选项有integer
,float
,numeric
,date
,date_time
和all
。默认情况下,此列表为空。encoding
:文件的编码方式。默认为站点encoding
配置选项。headers
:用于是否将文件的第一行解析为头的布尔字段。如果为false
,则将第一行视为数据。默认为true
。
例子:
csv_reader:
converters:
- numeric
- datetime
headers: true
encoding: utf-8
tsv_reader:
converters:
- all
headers: false