web-dev-qa-db-ja.com

YAML変数にjekyll /液体テンプレートデータを含めますか?

マークダウンファイルのYAML見出しを使用して、他の場所で使用できるブログ投稿にexcerpt変数を追加しています。これらの抜粋の1つでは、マークダウンリンクマークアップを介して以前のブログ投稿を参照し、サイトのベースURLの代わりに液体テンプレートデータ変数{{ site.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ヘッダーで液体マークアップを使用できないのではないかと思われます。

Jekyllによって処理されるページのYAMLヘッダーで液体マークアップを使用することは可能ですか?

  1. もしそうなら、私は示されている例で私が間違っていることは何ですか?
  2. not許可されている場合、他に誰が私が意図したことを達成できますか?現在、ラップトップでサイトを開発していますが、展開の準備ができたときに変更する必要があるため、ベース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

YAML内に液体変数をネストすることは不可能だと思います。少なくとも、私はそれを行う方法を理解していません。

うまくいく1つのアプローチは、 液体の置換フィルター を使用することです。具体的には、変数の置換に使用する文字列を定義します(例:!SITE_URL!)。次に、置換フィルターを使用して、出力中に目的のJekyll変数(例:site.url)に切り替えます。これが私のjekyll0.11インストールで期待通りに動作するカットダウンされた.mdファイルです:

---
layout: post

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

---

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

私のマシンでそれをテストすると、URLが適切に挿入され、期待どおりにマークダウンから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 }}

重要な注意点は site.urlを明示的に設定する必要があります 値です。 Jekyllでは無料で入手できません。 _config.ymlファイルで次のように設定できます。

url: http://alanwsmith.com

または、jekyllを呼び出すときに定義します。

jekyll --url http://alanwsmith.com
28
Alan W. Smith

今日、私は同様の問題に遭遇しました。解決策として、ネストされた液体テンプレートを展開できる次の単純なJekyllフィルタープラグインを作成しました(例:YAMLフロントマターの液体変数):

module Jekyll
  module LiquifyFilter
    def liquify(input)
      Liquid::Template.parse(input).render(@context)
    end
  end
end

Liquid::Template.register_filter(Jekyll::LiquifyFilter)

フィルタは、site-rootディレクトリの「_plugins」サブディレクトリに配置することでJekyllサイトに追加できます。上記のコードは、yoursite/_plugins /liquify_filter.rbファイルに簡単に貼り付けることができます。

その後、次のようなテンプレート...

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

...「GreetingsHarryPotter!」のような出力をレンダリングする必要があります。液化フィルターが内部の液体出力ブロックでも指定されている限り、拡張はより深いネストされた構造に対しても機能します。もちろん、{{site.url}}のようなものも機能します。

Update-これはRuby gem: https:// github。 com/gemfarmer/jekyll-liquify

45
blueling