В качестве движка шаблонов Jekyll использует Liquid. Все стандартные фильтры и теги доступны. Помимо этого, Jekyll предостовляет собственные фильтры и теги для Liquid.

Фильтры

  • relative_url - преобразует ссылку в полную, но без хоста.

{{ "/assets/style.css" | relative_url }}
/my-baseurl/assets/style.css

  • absolute_url - преобразует ссылку в полную с хостом.

{{ "/assets/style.css" | absolute_url }}
https://www.site.com/my-baseurl/assets/style.css

  • date_to_xmlschema - преобразует дату в ISO-8601 формат.

{{ site.time | date_to_xmlschema }}
2008-11-07T13:07:54-08:00

  • date_to_rfc822 - преобразует дату в RFC-822 формат.

{{ site.time | date_to_rfc822 }}
Mon, 07 Nov 2008 13:07:54 -0800

  • date_to_string - преобразует дату в строковый короткий формат.

{{ site.time | date_to_string }}
07 Nov 2008

  • date_to_long_string - преобразует дату в строковый длинный формат.

{{ site.time | date_to_long_string }}
07 November 2008

  • where - выбирает все объекты из массива, в которых по указанному ключу - указанное значение.

{{ site.members | where:"graduation_year","2014" }}

  • where_exp - выбирает все объекты из массива, в которых выполняется булевое условие.

{{ site.members | where_exp:"item",
"item.graduation_year == 2014" }} {{ site.members | where_exp:"item",
"item.graduation_year < 2014" }} {{ site.members | where_exp:"item",
"item.projects contains 'foo'" }}

  • group_by - группирует массив объектов по указанному свойству.

{{ site.members | group_by:"graduation_year" }}
[{"name"=>"2013", "items"=>[...]},
{"name"=>"2014", "items"=>[...]}]

  • group_by_exp - группирует массив объектов по указанному условию.

{{ site.members | group_by_exp:"item",
"item.graduation_year | truncate: 3, \"\"" }}
[{"name"=>"201...", "items"=>[...]},
{"name"=>"200...", "items"=>[...]}]

  • xml_escape - экранирует текст для XML.

{{ page.content | xml_escape }}

  • cgi_escape - экранирует текст для использования в URL.

{{ "foo, bar; baz?" | cgi_escape }}
foo%2C+bar%3B+baz%3F

  • uri_escape - экранирует текст для использования в URL.

{{ "http://foo.com/?q=foo, \bar?" | uri_escape }}
http://foo.com/?q=foo,%20%5Cbar?

  • number_of_words - считает количество слов.

{{ page.content | nuber_of_words }}
1337

  • array_to_sentence_string - преобразует массив в предложение.

{{ page.tags | array_to_sentence_string }}
foo, bar, and baz
{{ page.tags | array_to_sentence_string: 'or' }}
foo, bar, or baz

  • markdownify - конвертирует HTML в MD.

{{ page.excerpt | markdownify }}

  • smartify - конвертирует кавычки.

{{ page.title | smartify }}

  • scssify - собирает CSS.

{{ some_scss | scssify }} {{ some_sass | sassify }}

  • slugify - преобразует строку.

{{ "The _config.yml file" | slugify }}
the-config-yml-file
{{ "The _config.yml file" | slugify: 'pretty' }}
the-_config.yml-file

  • jsonify - конвертирует массив в JSON.

{{ site.data.projects | jsonify }}

  • normalize_whitespace - все пробелы приводит к единому типу.

{{ "a \n b" | normalize_whitespace }}

  • sort - сортирует массив.

{{ page.tags | sort }}
{{ site.posts | sort: 'author' }}
{{ site.pages | sort: 'title', 'last' }}

  • sample - выбирает одно или несколько случайных значений из массива.

{{ site.pages | sample }}
{{ site.pages | sample:2 }}

  • to_integer - приводит строку к числу.

{{ some_var | to_integer }}

  • Функции для работы с массивом. Не изменяет массив.

{{ page.tags | push: 'Spokane' }}
['Seattle', 'Tacoma', 'Spokane']
{{ page.tags | pop }}
['Seattle']
{{ page.tags | shift }}
['Tacoma']
{{ page.tags | unshift: "Olympia" }}
['Olympia', 'Seattle', 'Tacoma']

  • inspect - конфертирует объект в строку для дебага.

{{ some_var | inspect }}

Теги

Вставки

Иногда бывает необходимость переиспользовать некоторый код в разных местах. Как уже говорилось, такие части должны находится в директории _includes. Чтобы импортировать такой элемент используется liquid-тег include.


{% include header.html %}

Подсветка синтаксиса

Jekyll 3 использует встроенную подсветку синтаксиса с помощью Rouge. Сейчас поддерживается 130 языков. Для более низкой версии Jekyll нужно дополнительно установить Rouge и установить значение highlighter: rouge в _config.yml. Можно использовать подсветку синтаксиса языков с помощью Pygments. Для этого необходимо задать в конфигурации highlighter: pygments, предварительно установив:

gem install pygments.rb.
echo "gem 'pygments.rb'" >> Gemfile

При использовании подсветки можно передать два аргумента - первый имя языка, а второй - отображение номера строки

{% highlight ruby linenos %}
def foo
  puts 'foo'
end
{% endhighlight %}

Ссылки

Тег link позволяет генерировать валидную ссылку на необходимы ресурс. К сожалению, эта ссылка не будет иметь baseurl.

{{ site.baseurl }}{% link _collection/name-of-document.md %}
{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}
{{ site.baseurl }}{% link news/index.html %}
{{ site.baseurl }}{% link /assets/files/doc.pdf %}

Несколько важных замечаний

  • Если ссылка будет невалидной, то Jekyll не соберет сайт.
  • Нельзя использовать liquid-фильтры на ссылках.
  • Чтобы создать ссылку на пост можно воспользоваться фильтром post_url
{{ site.baseurl }}{% post_url YEAR-MO-DA-name-of-post %}