Можно ли расширить переменную в пост Front-Matter?

Я использую ряд элементов для ссылок в моем шаблоне, например:

related_links:
    - text: foo
      link: bar

Но иногда мне нужно сослаться на другие сообщения на моем сайте. Обычно я использую только /bar в ссылке, но это также используется как примечания в подкасте, я хочу расширить ссылку для http://example.com/bar. Но использование {% post_url YYYY-MM-DD-bar %} приводит к:

 Error: could not read file [REDACTED]: (<unknown>): found character that cannot start any token while scanning for the next token at line 33 column 12

Какие-нибудь советы?

1
HufflepuffBR 6 Сен 2016 в 14:28

3 ответа

Лучший ответ

Я нашел себе более элегантный:

{% assign real_link=link.link %}
{% assign link_start = real_link | slice: 0 %}
{% if  link_start == "/" %}{% assign real_link = real_link | prepend: site.url %}{% endif %}

Поскольку я начинаю все свои локальные ссылки с /, чтобы гарантировать, что ссылка будет связана с корнем на сайте, для меня это был лучший способ.

0
HufflepuffBR 8 Сен 2016 в 13:55

То, что вы хотите сделать, не работает из-за конвейера Джекилла:

  1. разбирать первичный материал YAML
  2. обработать остальную часть документа с помощью Liquid
  3. проанализировать результат предыдущего шага с помощью Markdown

{% post_url YYYY-MM-DD-bar %} - это команда Liquid. Как видите, Liquid обрабатывает только часть вашего файла под заголовком YAML. Поэтому замены Liquid там не происходит.

Вместо этого вы можете написать что-то вроде этого под заголовком:

{% assign link = post_url YYYY-MM-DD-bar %}

А затем используйте {{link}} где-нибудь еще. Если у вас есть несколько ссылок, все становится взломано. Что-то вроде этого может сработать, но я недостаточно знаком с Liquid, чтобы знать наверняка:

{% capture nl %}
{% endcapture %}
{% capture rawlinks %}
{% post_url YYYY-MM-DD-bar %}
{% post_url YYYY-MM-DD-bar %}
{% endcapture %}
{% assign links = rawlinks | split nl %}

Затем вы можете указать индексы в своем вступлении в YAML:

related_links:
  - text: foo
    linkindex: 0

И, наконец, где-то в вашем документе:

{{ links[related_link.linkindex] }}

YMMV, если этот уровень уродства оправдан для вашего варианта использования.

0
flyx 7 Сен 2016 в 13:39

Если вы используете

related_links:
    - text: foo
      link: {% post_url YYYY-MM-DD-bar %}

Вы получите сообщение об ошибке, потому что { запустит отображение стиля потока, а % не может запустить токен в YAML. Вы должны поместить весь скаляр в (двойные) кавычки:

related_links:
    - text: foo
      link: "{% post_url YYYY-MM-DD-bar %}"
0
Anthon 6 Сен 2016 в 12:01