Включить данные шаблона jekyll / liquid в переменную YAML?
Я использую заголовок YAML файла markdown для добавления excerpt
переменная для сообщений в блоге, которые я могу использовать в другом месте. В одном из этих отрывков я ссылаюсь на более раннее сообщение в блоге через разметку ссылки markdown, и я использую переменную данных liquid template {{ site.url }}
вместо базового URL сайта.
Итак, у меня есть что-то вроде (обрезал его несколько)
---
title: "Decluttering ordination plots in vegan part 2: orditorp()"
status: publish
layout: post
published: true
tags:
- tag1
- tag2
excerpt: In the [earlier post in this series]({{ site.url }}/2013/01/12/
decluttering-ordination-plots-in-vegan-part-1-ordilabel/ "Decluttering ordination
plots in vegan part 1: ordilabel()") I looked at the `ordilabel()` function
----
однако Джекилу и парсеру Maruku md это не нравится, что заставляет меня подозревать, что вы не можете использовать жидкость разметка в заголовке YAML.
можно ли использовать жидкую разметку в заголовке YAML страниц, обрабатываемых jekyll?
- если это так, то что я делаю неправильно в приведенном примере?
- если это не разрешено, кто еще может достичь того, что я намеревался? В настоящее время я разрабатываю свой сайт на своем ноутбуке и не хочу жестко кодировать базовый URL, поскольку он должен будет измениться, когда я буду готов к развертыванию.
ошибки, которые я получаю от Маруку идут:
| Maruku tells you:
+---------------------------------------------------------------------------
| Must quote title
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-o
| --------------------------------------|-------------------------------------
| +--- Byte 40
и
| Maruku tells you:
+---------------------------------------------------------------------------
| Unclosed link
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
и
| Maruku tells you:
+---------------------------------------------------------------------------
| No closing ): I will not create the link for ["earlier post in this series"]
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
2 ответов
Я не верю, что можно вложить жидкие переменные внутри YAML. По крайней мере, я не знаю, как это сделать.
один подход, который будет работать, - использовать жидкость заменяет фильтр. В частности, определите строку, которую вы хотите использовать для замены переменной (например,!SITE_URL!
). Затем используйте фильтр replace, чтобы переключить его на нужную переменную Jekyll (например,site.url
) в течение выходных. Вот тебе порез .md-файл, который ведет себя так, как ожидалось на моем jekyll 0.11 установки:
---
layout: post
excerpt: In the [earlier post in this series](!SITE_URL!/2013/01/12/)
---
{{ page.excerpt | replace: '!SITE_URL!', site.url }}
тестирование того, что на моей машине URL вставлен правильно, а затем переведен из markdown в HTML-ссылку, как ожидалось. Если у вас есть несколько элементов для замены, вы можете связать несколько вызовов replace вместе.
---
layout: post
my_name: Alan W. Smith
multi_replace_test: 'Name: !PAGE_MY_NAME! - Site: [!SITE_URL!](!SITE_URL!)'
---
{{ page.multi_replace_test | replace: '!SITE_URL!', site.url | replace: '!PAGE_MY_NAME!', page.my_name }}
важно отметить, что необходимо явно задать сайт.URL-адрес значение. Ты не получишь это бесплатно с Джекилом. Вы можете либо установить его в свой _config.yml
файл:
url: http://alanwsmith.com
или, определить это когда ты зовешь Джекила:
jekyll --url http://alanwsmith.com
сегодня я столкнулся с подобной проблемой. В качестве решения я создал следующий простой фильтр-плагин Jekyll, который позволяет расширять вложенные жидкие шаблоны (например, жидкие переменные в фронте YAML):
module Jekyll
module LiquifyFilter
def liquify(input)
Liquid::Template.parse(input).render(@context)
end
end
end
Liquid::Template.register_filter(Jekyll::LiquifyFilter)
фильтры можно добавить на сайт Jekyll, поместив их в подкаталог "_plugins" корневого каталога сайта. Вышеуказанный код можно просто вставить в yoursite / _plugins / liquify_filter.файл rb.
после этого шаблон как...
---
layout: default
first_name: Harry
last_name: Potter
greetings: Greetings {{ page.first_name }} {{ page.last_name }}!
---
{{ page.greetings | liquify }}
... должен сделать какой-то вывод вроде "Привет Гарри Поттер!". Расширение работает также для более глубоких вложенных структур-если фильтр liquify также указан на внутренних блоках вывода жидкости. Что-то вроде {{ site.url }} работает, конечно, тоже.
обновление - похоже, теперь это доступно как рубиновый камень:https://github.com/gemfarmer/jekyll-liquify.