从Jekyll插件向页面添加属性

假设我想要一个包含这样内容的页面:

{{page.comment_count}} Comment(s)

{% for c in page.comment_list %}
{{c.title}}
{{c.content}}
{% endfor %}

默认情况下,名为comment_countcomment_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和页面的最佳方法。