Jekyll 自定义 Liquid 标签(Liquid Tags)

如果你希望在站点中包含自定义 Liquid 标签(Liquid Tags),可以通过接入标签系统来实现。 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>

标签块(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 这个名称进行注册,但不建议在同一个项目中使用相同名称同时注册标签和标签块,因为这可能会导致冲突。