タグ

サイトでカスタムLiquidタグを使用したい場合は、タグシステムで行うことができます。組み込み例として、Jekyllにはhighlightincludeタグがあります。以下は、ページがレンダリングされた時を出力するカスタム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)

最低、次のメソッドの実装が必要です。

メソッド 説明

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で登録しました。しかし、同じプロジェクトでタグとタグブロックに同じ名前を使用することは推奨しません。競合する可能性があります。