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

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

макеты/исполнитель.html

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

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


person mahemoff    schedule 18.04.2012    source источник
comment
YAML (это то, что главное, Liquid не выполняет замены там, я не думаю) поддерживает ссылки, но мне не удалось заставить их работать в макете (хотя они работают локально на странице).   -  person huon    schedule 19.04.2012
comment
У меня был аналогичный вопрос, когда мне нужны были переменные разбиения на страницы в заголовке. Решение было дано здесь: stackoverflow.com/a/29729309/599477   -  person cornernote    schedule 20.04.2015


Ответы (2)


На данный момент Jekyll не поддерживает переменные Liquid в самом начале, и единственный способ сделать это — использовать плагин, такой как 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>
person C. Augusto Proiete    schedule 14.06.2016

Я не уверен, есть ли способ сделать это правильно (т.е. на стороне сервера), но временной мерой может быть небольшой фрагмент 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.

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

person huon    schedule 25.04.2012