В дополнение к встроенным переменным, вы можете задавать свои собственные данные, доступные с помощью шаблонизатора Liquid.

Jekyll поддерживает загрузку данных в форматах YAML, JSON и CSV из файлов, расположенных в каталоге _data. Отметьте, чтов файлах CSV должен быть заголовок.

Возможность добавлять данные позволяет вам избегать повторения в ваших шаблонах, а также задавать отдельные опции сайта без изменений в config.yml..

Плагины и темы также могут использовать файлы с данными для задания конфигурационных переменных.

Каталог с данными

Как было сказано в разделе о структуре каталогов, каталог _data это место где вы можете хранить дополнительные данные, используемые Jekyll при генерации сайта. Это должны быть файлы YAML (с расширениями .yml, .yaml, .json или csv), они доступны через site.data.

Пример: список членов

Это простейший пример использования файлов с данными вместо многократного копирования больших фрагментов кода в шаблонах Jekyll.

В файле _data/members.yml:

- name: Tom Preston-Werner
  github: mojombo

- name: Parker Moore
  github: parkr

- name: Liu Fengyun
  github: liufengyun

Или в _data/members.csv:

name,github
Tom Preston-Werner,mojombo
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>

Пример: организации

Файлы с данными могут также располагаться в подкаталогах внутри _data . Каждый уровень подкаталогов добавляется к пространству имени переменной. В примере ниже показано, как организации GitHub определяются в отдельных файлах в каталоге orgs :

В файле _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>

Пример: доступ к данным конкретного автора

Доступ к данным есть также у страниц и постов, в следующем примере показано, как можно извлечь какие-либо данные.

_data/people.yml:

dave:
    name: David Smith
    twitter: DavidSilvaSmith 

Автор может быть указан как переменная страницы в ее вводной:

---
title: sample post
author: dave
---

{% assign author = site.data.people[page.author] %}
<a rel="author"
  href="{{ author.twitter }}"
  title="{{ author.name }}">
    {{ author.name }}
</a>