【问题标题】:Add properties to a page from a Jekyll plugin从 Jekyll 插件向页面添加属性
【发布时间】:2013-10-19 16:04:53
【问题描述】:

假设我想要一个内容如下的页面:

<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 现有代码的情况下填充这些字段的安全地方在哪里?

或者有没有更好的方法来实现这样的 cmets 列表?

【问题讨论】:

标签: ruby jekyll liquid octopress


【解决方案1】:

不幸的是,目前不可能在不影响 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 数组中条目对应的方法的返回值。

这是迄今为止扩展帖子和页面的最佳方式。

【讨论】:

  • 这个实现了吗?
  • 我相信这不再起作用了,从 Jekyll 3.2.0 开始。
猜你喜欢
  • 2011-02-25
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多