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)

当然,您可能希望在尝试使用之前检查配置键/值是否已定义。这留给读者作为练习。


另一个可能的选择

Jekyll 插件 Wiki 页面的“液体过滤器”部分包含以下内容:

在 Jekyll 中,您可以通过寄存器访问站点对象。例如,您可以像这样访问全局配置 (_config.yml):@context.registers[:site].config['cdn']。

我还没有花时间让它工作,但它可能也值得一试。

于 2012-07-12T09:31:13.330 回答
16

Jekyll.configuration({})['KEY_NAME']会破坏--config命令行选项,因为它总是会从 _config.yml 文件加载配置。另一个不好的副作用是它会再次读取 _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 回答