6

Jekyll (Liquid) ブロック プラグインがあり、現在のページが何であるかを検出したいと考えています。コンテキストが render に渡され、現在のサイト オブジェクトを context.registers[:site] として取得できることがわかります。ただし、現在のページを context.registers[:page] として取得しようとすると失敗します。

私が解決しようとしている問題は、現在のページがタグで言及されているページであるかどうかを検出して強調表示する単純なブロック プラグインを作成することです。

どんなヒントでも大歓迎です。

ありがとう!

4

4 に答える 4

16

これも次のように行うことができます。

  def render(context)
    page_url = context.environments.first["page"]["url"]

これは明らかではありませんが、コードにパッチを当てる必要はありません。

于 2011-10-05T19:36:10.050 に答える
3

context['page']urlを含む現在のページのほとんどのプロパティを含むハッシュを返すようですpath

実際のページオブジェクトは次のように取得できます

context.registers[:site].pages.detect { |p| p.path==context['page']['path'] }
于 2014-12-24T11:40:47.710 に答える
1

Jekyllをそのまま使用する良い方法はないと思います。convertible.rbオブジェクトを Liquid に渡すだけでsite、ページ固有のデータは含まれません。

編集convertible.rbして必要なデータを渡し、プル リクエストをメイン プロジェクトに送信して変更を取り込み、フォークをローカルで使用してサイトを生成することをお勧めします。オープンソース万歳!

次の些細なパッチは、Jekyll 0.11.0 に対してローカルで機能し、Liquid でページ ハッシュを次のように利用できるようにしますcontext.registers[:page](注: この時点では事前に変換されたハッシュであるためcontext.registers[:page]['url']、 ではなく にアクセスしますcontext.registers[:page].url)。

diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb
index d33abc5..a674ef5 100644
--- a/lib/jekyll/convertible.rb
+++ b/lib/jekyll/convertible.rb
@@ -69,7 +69,7 @@ module Jekyll
     #
     # Returns nothing.
     def do_layout(payload, layouts)
-      info = { :filters => [Jekyll::Filters], :registers => { :site => self.site } }
+      info = { :filters => [Jekyll::Filters], :registers => { :site => self.site, :page => payload['page'] } }

       # render and transform content (this becomes the final content of the object)
       payload["pygments_prefix"] = converter.pygments_prefix

それが役立つことを願っています!

于 2011-09-20T06:27:40.500 に答える