태그

사이트에 자신의 Liquid 태그를 사용하고 싶다면, 태그 시스템의 Hook 을 사용하면 됩니다. 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)

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 이라는 이름으로 정의되었는데, 하나의 프로젝트에서 태그와 태그 블록을 같은 이름으로 정의하는 것은 충돌을 야기할 수 있으므로 권장하지 않습니다.