20

Jekyll Only First Paragraphプラグインに変更を加えて、「続きを読む」リンクの生成を構成可能なオプションにしたいと思います。

これを行うには、プラグイン内のJekyllサイト構成にアクセスできる必要がありますAssetFilter。利用可能な構成で、変更を加えることができます。プラグインでサイト構成を利用できるようにする方法がわかりません。

以下のコードは、私がsite.config利用できる場所を示しています。

require 'nokogiri'

module Jekyll
  module AssetFilter
    def only_first_p(post)
      # site.config needs to be available here to modify the output based on the configuration

      output = "<p>"
      output << Nokogiri::HTML(post["content"]).at_css("p").inner_html
      output << %{</p><a class="readmore" href="#{post["url"]}">Read more</a>}

      output
    end
  end
end

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


これは達成できますか?

4

3 に答える 3

23

概要

次のプラグインを使用して、Jekyll構成オプションにアクセスできます。

Jekyll.configuration({})['KEY_NAME']

構成キーにネストされたレベルが含まれている場合、形式は次のとおりです。

Jekyll.configuration({})['KEY_LEVEL_1']['KEY_LEVEL_2']

_config.ymlに次が含まれている場合:

testvar: new value

custom_root:
    second_level: sub level data

これらの値を単純に出力する基本的な例は、次のようになります。

require 'nokogiri'

module Jekyll
  module AssetFilter
    def only_first_p(post)

      @c_value = Jekyll.configuration({})['testvar']
      @c_value_nested = Jekyll.configuration({})['custom_root']['second_level']

      output = "<p>"

      ### Confirm you got the config values
      output << "<br />"
      output << "c_value: " + @c_value + "<br />"
      output << "c_value_nested: " + @c_value_nested + "<br />"
      output << "<br />"
      ###

      output << Nokogiri::HTML(post["content"]).at_css("p").inner_html
      output << %{</p><a class="readmore" href="#{post["url"]}">Read more</a>}

      output
    end
  end
end

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

もちろん、使用を試みる前に、構成キー/値が定義されていることを確認するチェックを入れたいと思うでしょう。それは読者のための練習問題として残されています。


別の可能なオプション

JekyllPluginsWikiページの「Liquidfilters」セクションには次のものが含まれています。

Jekyllでは、レジスタを介してサイトオブジェクトにアクセスできます。例として、次のようにグローバル構成(_config.yml)にアクセスできます:@ context.registers [:site].config['cdn']。

私はそれを機能させるために時間を費やしていませんが、それもチェックする価値があるかもしれません。

于 2012-07-12T09:31:13.330 に答える
16

Jekyll.configuration({})['KEY_NAME']--config常に_config.ymlファイルから構成をロードするため、コマンドラインオプションが壊れます。もう1つの悪い副作用は、_config.ymlファイルを再度読み取ることです。

context.registers[:site].config['KEY_NAME']Jekyllによってすでにロードされている構成からキーを取得するため、正解です。

于 2015-03-20T16:58:48.927 に答える
2

ジェネレーター(プラグインでもあります)を使用している場合は、次のような構成を取得できます。

class MyPlugin < Jekyll::Generator
  def generate(site)
    puts site.config["max_posts"] # max_posts as defined in _config.yml

サイトを引数として取得し、.configにハッシュとしてアクセスできます。

于 2017-08-15T13:15:02.550 に答える