我想对Jekyll
Only First Paragraph plugin进行更改,以便生成“阅读更多”链接是可配置的选项.
为了做到这一点,我需要能够访问插件的AssetFilter中的Jekyll网站配置.随着配置的可用,我可以做出改变.我不知道如何使网站配置可用于插件.
下面的代码演示了我想要的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)
这可以实现吗
解决方法
概观
您可以在插件中访问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 Plugins Wiki Page的“液体过滤器”部分包含以下内容:
In Jekyll you can access the site object through registers. As an example,you can access the global configuration (_config.yml) like this: @context.registers[:site].config[‘cdn’].
我没有花时间去找工作,但也可能值得一试.