2011-09-20 6 views
6

私はJekyll(Liquid)ブロックプラグインを持っており、現在のページが何であるかを検出したいと思います。コンテキストがレンダリングに渡され、現在のサイトオブジェクトをcontext.registers [:site]として取得できることがわかりました。しかし、現在のページをcontext.registers [:page]として取得しようとしても失敗します。Jekyllタグプラグインで現在のページを検出するにはどうすればよいですか?

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

ヒントをいただければ幸いです。

ありがとうございます!

答えて

15

は、我々はまた、このような操作を行うことができ判明します。

+0

で取得することができurlpath

を含め、現在のページのプロパティのほとんどでハッシュを返すように思われます。完全に直感的ではありません。これを計算してくれてありがとう。 – cboettig

+2

しかし 'initialize'で' context'オブジェクトを取得する必要があればどうしますか? – jackyalcine

1

私はジキルと同じようにするのは良い方法はないと思います。 convertible.rbは、ページ固有のデータを含まないLiquidにsiteオブジェクトのみを渡します。

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

次些細なパッチが(注:context.registers[:page]['url']にアクセスしたいので、それは、この時点で変換前のハッシュだ、ではないcontext.registers[:page].urlcontext.registers[:page]のような液体で利用可能なページのハッシュを作り、ジキル0.11.0に対してローカルに私の作品:

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 

明らかにされていません

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

をそれがコードにパッチを適用する必要はありません:

2

context['page']華麗だように実際ページオブジェクトが

context.registers[:site].pages.detect { |p| p.path==context['page']['path'] } 
関連する問題