A set of monkey patches that allows you to use Liquid variables in a variety of places in Jekyll.
You can include Liquid variables in your frontmatter, like this:
---
title: This is very {{ site.data.conrefs.product_type }}
---
Some page.
In this case, title would equals the value of product_type
in a data file called conrefs.
Note that Markdown rendering is enabled for this content.
You can scope your variables to an audience value. For example, given a conref file that looks like this:
product_name:
dotcom: GitHub
2.0: GitHub Enterprise
11.10.340: GitHub Enterprise
And a file that looks like this:
---
title: Welcome to {{ site.data.conrefs.product_name[site.audience] }}
---
Some other page.
The title renders through product_name
, then the value of site.audience
to become "Welcome to GitHub".
Your data files can also rely on Liquid substitution. For example, given a data file called categories.yml that looks like this:
Bootcamp:
- Set Up Git
- Create A Repo
- Fork A Repo
- Be Social
- '{{ site.data.conrefs.product_name[site.audience] }} Glossary'
- Good Resources for Learning Git and GitHub
The value renders out to "GitHub Glossary", just like above.
You can add filters within data files, to show or hide content depending on certain variable criteria.
For example, given a data file that looks like this:
Listing:
{% if page.version == '2.0' %}
- Article v2.0
{% endif %}
{% if page.version != '2.0' %}
- Article v2.1
{% endif %}
{% unless page.version == '2.0' %}
Ignored:
- Item1
- Item 2
{% endunless %}
If page.version
is equal to '2.0'
, only Listing: - Artivle v2.0
will render.
To support such a syntax, you'll need to add a new entry in your config.yml
that defines your variables, like this:
data_file_variables:
-
scope:
path: ""
values:
version: "2.0"
data_file_variables
is an array of hashes. The scope
key defines which data files are affected by the variables; the data file must match the path define in path
. Regular expression syntaxes are supported in path
, and a blank path
refers to every data file. The values
key specifies every key you want to support in your data file.
Here's a more complex example:
data_file_variables:
-
scope:
path: ""
values:
version: "2.0"
-
scope:
path: "ent\\w+_"
values:
version: "2.1"
In this case, every data file has a page.version
of 2.0
. However, only data files prefixed with ent
, containing one or more word characters (\w+
), and followed by an underscore (_
), have a value of 2.1
.
As an addition to the above, a new tag, data_render
, can be used to iterate over filtered data files.
You can call this filter by:
data_render
site.data.data_render
site.data.data_render
to walk along the datadata_render
rewrite to site.data.data_render
Here's an example:
{% data_render site.data.filtered_categories(:version => 2.0.to_s) %}
{% for category_hash in site.data.data_render %}
{% assign category_title = category_hash[0] %}
{% assign category_articles = category_hash[1] %}
{{ category_title }}
{{ category_articles }}
{% endfor %}
Note that data files are read once, to improve performance. The variables passed in are evaluated for each call.