Включить данные шаблона 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?

  1. если это так, то что я делаю неправильно в приведенном примере?
  2. если это не разрешено, кто еще может достичь того, что я намеревался? В настоящее время я разрабатываю свой сайт на своем ноутбуке и не хочу жестко кодировать базовый 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.