Подтвердить что ты не робот

Включить данные шаблона jekyll/liquid в переменную YAML?

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

Однако jekyll и парсер Maruku md не нравится, что заставляет меня подозревать, что вы не можете использовать жидкую разметку в заголовке YAML.

Можно ли использовать жидкую разметку в заголовке YAML страниц, обрабатываемых jekyll?

  • Если это так, что я делаю неправильно в показанном примере?
  • Если это не допустимо, кому еще я могу достичь того, что я намеревался? В настоящее время я разрабатываю свой сайт на своем ноутбуке и не хочу жестко кодировать базовый URL-адрес, поскольку он будет изменяться, когда я буду готов к развертыванию.

Ошибки, которые я получаю от Maruku, следующие:

| 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
4b9b3361

Ответ 1

Я не считаю возможным вложить жидкие переменные внутри YAML. По крайней мере, я не знаю, как это сделать.

Одним из подходов, который будет работать, является использование фильтра Liquid replace. В частности, определите строку, которую вы хотите использовать для замены переменной (например, !SITE_URL!). Затем используйте фильтр замены, чтобы переключить его на желаемую переменную Jekyll (например, site.url) во время вывода. Здесь вырезаем файл .md, который ведет себя так, как ожидалось, на моем jekyll 0.11 install:

---
layout: post

excerpt: In the [earlier post in this series](!SITE_URL!/2013/01/12/)

---

{{ page.excerpt | replace: '!SITE_URL!', site.url }}

Тестирование того, что на моей машине URL-адрес вставлен правильно, а затем переведен из уценки в HTML-ссылку, как и ожидалось. Если у вас есть несколько замещаемых элементов, вы можете связать несколько замещающих вызовов вместе.

---
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 }}

Важно отметить, что необходимо явно указать значение site.url. Вы не получите это бесплатно с Джекиллом. Вы можете установить его в файле _config.yml с помощью:

url: http://alanwsmith.com

Или, определите его, когда вы вызываете jekyll:

jekyll --url http://alanwsmith.com

Ответ 2

Сегодня у меня возникла аналогичная проблема. В качестве решения я создал следующий простой фильтр-фильтр 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" корневого каталога site-root. Вышеприведенный код можно просто вставить в файл yoursite/_plugins/liquidify_filter.rb.

После этого шаблон вроде...

---
layout: default
first_name: Harry
last_name: Potter
greetings: Greetings {{ page.first_name }} {{ page.last_name }}!
---
{{ page.greetings | liquify }}

... должен сделать какой-то вывод, например "Привет, Гарри Поттер!". Расширение работает также и для более глубоких вложенных структур - пока фильтр сжижения также указан на внутренних выходных блоках жидкости. Конечно же, что-то вроде {{site.url}}.

Обновление - похоже, что теперь это доступно как драгоценный камень Ruby: https://github.com/gemfarmer/jekyll-liquify.