Пользовательские переменные в Jekyll Front Matter

Новое в Jekyll и интересно, можно ли включить в переменную Jekyll специальные переменные. Это было бы полезно для вложенных макетов, например, например:

Макеты/artist.html

----
layout: default
title: {{ page.artist }} (Artist)
----

Я получаю сообщение об ошибке.

Ответ 1

Я не уверен, есть ли способ сделать это правильно (например, на стороне сервера), но мерой стоп-пробела может быть небольшой фрагмент Javascript, который устанавливает правильный заголовок в браузере пользователей. например.

---
title: Default title blah blah
---

[... content ...]

<span id="pagetitle" style="display: none">{{ page.artist | escape }} (Artist)</span>

<script type="text/javascript">
    var pagetitle = document.getElementById("pagetitle");
    if (pagetitle) {
        document.title = pagetitle.textContent;
    }
</script>

Примечания:

Подстановка page.artist выполняется в HTML, а не в Javascript, потому что проще процитировать любые специальные символы HTML (через escape), а не специальные символы Javascript ' или " или \ (для этого нет встроенного фильтра).

Можно также перемещать область pagetitle в верхнюю часть страницы так, чтобы она находилась рядом с другим элементом фронта YAML.

К сожалению, это очень плохой способ достичь этого, но похоже, что это единственный способ, кроме написания плагина.

Ответ 2

В настоящий момент Jekyll не поддерживает жидкие переменные в фронте, и единственный способ сделать это - через плагин, например jekyll-conrefifier.


В качестве альтернативы, тем не менее, вы можете создавать переменные, которые вы повторно используете в одном файле:

{% assign new_title = page.title | append: " (Artist)" %}
<h1>{{ new_title }}</h1>

и вы также можете передавать переменные в файлы, которые входят в комплект. Например, включая файл из _includes\display-post.html, передающий измененный заголовок в качестве аргумента:

{% assign new_title = page.title | append: " (Artist)" %}
{% include display-post.html post_title=new_title %}

И затем получение значения переданного значения (пример содержимого _includes\display-post.html):

{% assign title_received = include.post_title %}

<h1>Title that as passed in: {{ title_received }}</h1>