タグ
サイトにカスタムの 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 タグでは以下を実装する必要があります。
メソッド | 説明 |
---|---|
|
タグのコンテンツを出力します。 |
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
という名前で登録されていますが、同じ名前のタグとタグブロックを同じプロジェクトに登録することは推奨されません。競合が発生する可能性があるためです。