Пользовательские переменные в 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>