태그
사이트에 자신의 Liquid 태그를 사용하고 싶다면,
태그 시스템의 Hook 을 사용하면 됩니다.
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
이라는 이름으로
정의되었는데, 하나의 프로젝트에서 태그와 태그 블록을 같은 이름으로 정의하는
것은 충돌을 야기할 수 있으므로 권장하지
않습니다.