タグ

サイトにカスタムの Liquid タグを含めたい場合は、タグ付けシステムにフックすることで行えます。Jekyll により追加された組み込みの例では、highlight タグと include タグがあります。以下は、ページがレンダリングされた時間を表示するカスタムの Liquid タグの例です。

module Jekyll
  class RenderTimeTag < Liquid::Tag

    def initialize(tag_name, text, tokens)
      super
      @text = text
    end

    def render(context)
      "#{@text} #{Time.now}"
    end
  end
end

Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag)

最低限、Liquid タグでは以下を実装する必要があります。

メソッド 説明

render

タグのコンテンツを出力します。

Liquid テンプレートエンジンにカスタムタグを次のように登録する必要もあります。

Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag)

上記の例では、次のタグをページのどこかに配置できます。

<p>{% render_time page rendered at: %}</p>

するとページにこのような出力が表示されます。

<p>page rendered at: Tue June 22 23:38:47 –0500 2010</p>

タグブロック

上で示した render_time タグは、Liquid::Block クラスを継承することでタグブロックとしても書き直せます。以下の例を見てください。

module Jekyll
  class RenderTimeTagBlock < Liquid::Block

    def render(context)
      text = super
      "<p>#{text} #{Time.now}</p>"
    end

  end
end

Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTagBlock)

タグブロックをどこでも使用できるようになりました。

{% render_time %}
page rendered at:
{% endrender_time %}

すると、ページに前と同じ出力が表示されます。

<p>page rendered at: Tue June 22 23:38:47 –0500 2010</p>

上の例では、タグブロックとタグの両方が render_timeという名前で登録されていますが、同じ名前のタグとタグブロックを同じプロジェクトに登録することは推奨されません。競合が発生する可能性があるためです。