Jekyll 自定义 Liquid 标签(Liquid Tags)
如果你希望在站点中包含自定义 Liquid 标签(Liquid Tags),可以通过接入标签系统来实现。
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>
标签块(Tag block)
上面看到的 render_time 标签,也可以通过继承 Liquid::Block 类改写为标签块(tag 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 这个名称进行注册,但不建议在同一个项目中使用相同名称同时注册标签和标签块,因为这可能会导致冲突。