从Jekyll插件向页面添加属性
假设我想要一个包含这样内容的页面:
{{page.comment_count}} Comment(s)
{% for c in page.comment_list %} {{c.title}}
{{c.content}} {% endfor %}
默认情况下,名为comment_count
或comment_list
的页面上没有变量; 相反,我希望将这些变量从Jekyll插件添加到页面中。 哪里是安全的地方我可以填充这些字段而不干扰Jekyll现有的代码?
或者有更好的方法来实现这样的评论列表?
不幸的是,目前还没有可能在没有内部Jekyll内容的情况下添加这些属性。 我们正在为#after_initialize
等添加钩子,但还没有。
我最好的建议是添加这些属性,就像我在我的博客上使用我的Octopress Date插件一样 。 它使用Jekyll v1.2.0的Jekyll::Post#to_liquid
方法添加这些属性,这些属性通过Post
上的send(attr)
收集:
class Jekyll::Post def comment_count comment_list.size end def comment_list YAML.safe_load_file("_comments/#{self.id}.yml") end # Convert this post into a Hash for use in Liquid templates. # # Returns def to_liquid(attrs = ATTRIBUTES_FOR_LIQUID) super(attrs + %w[ comment_count comment_list ]) end end
super(attrs + %w[ ... ])
将确保仍然包含所有旧属性,然后收集与String
数组中的条目对应的方法的返回值。
这是迄今为止扩展post和页面的最佳方法。