杰基尔博士说我们可以create a custom tag:
module Jekyll
class TestTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
@tokens = tokens
end
def render(context)
"text: #{@text} tokens: #{@tokens}"
end
end
end
Liquid::Template.register_tag('test', Jekyll::TestTag)
似乎initialize
是一个内置函数,虽然文档没有明确说明。
当我在页面中包含此标记时:
{% test hallo world %}
我明白了:
text: hallo world tokens: {:locale=>#<Liquid::I18n:0x007fd62dbd5e38
@path=”/Library/Ruby/Gems/2.0.0/gems/liquid-3.0.6/lib/liquid/locales/en.yml”>,
:line_numbers=>true}
这些代币来自哪里?他们在做什么?我可以自己设置令牌吗?
答案 0 :(得分:3)
您使用的是super
关键字,这意味着它会调用其父类的initialize
方法,在本例中为Liquid::Tag,它是构造函数该类的一部分,并创建一个Tag
的新实例。
tokens
argument:
是存储Liquid选项的哈希。默认情况下 有两个键:: locale和:line_numbers,第一个是Liquid :: I18n 对象,第二个是确定是否有错误的布尔参数 消息应显示发生错误的行号。这个 argument主要用于在Liquid上显示本地化的错误消息 内置标签和过滤器。
答案 1 :(得分:1)
使用super
keyword定义方法时,告诉解析器在查找路径中查找同名方法。
Liquid::Tag有一个初始化方法,这就是那些令牌最有可能来自的地方。