从Jekyll插件向页面添加属性

时间:2013-10-11 14:17:33

标签: ruby jekyll liquid octopress

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

<h1>{{page.comment_count}} Comment(s)</h1>
{% for c in page.comment_list %}
<div>
    <strong>{{c.title}}</strong><br/>
    {{c.content}}
</div>
{% endfor %}

默认情况下,名为comment_countcomment_list的网页上没有变量;相反,我希望将这些变量从Jekyll插件添加到页面中。哪里是安全的地方我可以填充这些字段而不会干扰Jekyll现有的代码?

或者是否有更好的方法来实现这样的评论列表?

1 个答案:

答案 0 :(得分:3)

不幸的是,目前还没有可能在没有内部Jekyll内容的情况下添加这些属性。我们正在为#after_initialize等添加钩子,但还没有。

我最好的建议是在我的博客上添加my Octopress Date plugin这些属性。它使用Jekyll v1.2.0的Jekyll::Post#to_liquid方法添加这些属性,这些属性通过send(attr)上的Post收集:

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 <Hash>
  def to_liquid(attrs = ATTRIBUTES_FOR_LIQUID)
    super(attrs + %w[
      comment_count
      comment_list
    ])
  end
end

super(attrs + %w[ ... ])将确保仍包含所有旧属性,然后收集与String数组中的条目对应的方法的返回值。

到目前为止,这是扩展帖子和页面的最佳方式。