4

次のようなコンテンツを含むページが必要だとします。

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

comment_count名前付きまたはcomment_listデフォルトでページに変数はありません。代わりに、これらの変数を Jekyll プラグインからページに追加したいと考えています。Jekyll の既存のコードに干渉することなく、これらのフィールドに入力できる安全な場所はどこですか?

または、このようなコメントのリストを達成するためのより良い方法はありますか?

4

1 に答える 1

3

残念ながら、現在のところ、Jekyll の内部処理をいじらずにこれらの属性を追加することはできません。などのフックを追加しようとしています#after_initializeが、まだそこにはありません。

私の最良の提案は、ブログの Octopress Date プラグインで行ったように、これらの属性を追加することです。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配列内のエントリに対応するメソッドの戻り値を収集します。

これは、これまでのところ、投稿とページを拡張するための最良の手段です。

于 2013-10-20T18:24:30.330 に答える