41

マークダウン ファイルの YAML 見出しを使用して、excerpt他の場所で使用できる変数をブログ投稿に追加しています。これらの抜粋の 1 つで、マークダウン リンク マークアップを介して以前のブログ投稿を参照し{{ site.url }}、サイトのベース URL の代わりに Liquid テンプレート データ変数を使用しています。

だから私は(それを多少トリミング)のようなものを持っています

--- 
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 ヘッダーで Liquid マークアップを使用できないと思われます。

jekyll で扱うページの YAML ヘッダーに Liquid マークアップを使用することはできますか?

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

3 に答える 3

49

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

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

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

フィルタは、サイト ルート ディレクトリの「_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 }}

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

更新- これは Ruby gem として利用できるようになりました: https://github.com/gemfarmer/jekyll-liquify

于 2013-06-11T14:34:02.593 に答える
35

YAML 内で Liquid 変数をネストできるとは思えません。少なくとも、私はそれを行う方法を理解していません。

有効なアプローチの 1 つは、Liquid の replace フィルターを使用することです。具体的には、変数置換に使用する文字列を定義します (例: !SITE_URL!)。次に、replace フィルターを使用してsite.url、出力中に目的の Jekyll 変数 (例: ) に切り替えます。これは、私のjekyll 0.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 リンクに変換されます。置換する項目が複数ある場合は、複数の置換呼び出しをつなぎ合わせることができます。

---
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
于 2013-02-01T16:31:19.173 に答える