在Jekyll的_data结构中给出一个数组:
在_data/array.yml
:
- id: id1
name: name1
- id: id2
name: name2
如何创建一个块标记,用于查找具有指定id的对象并传入块标记内的上下文?喜欢这个
{% item id1 %}
<p>{{ site.data.array.length }}</p>
<p>{{ item.name }}</p>
{% enditem %}
到目前为止我已经做到了这一点:
module Jekyll
class ItemBlock < Liquid::Block
def initialize(tag_name, markup, tokens)
super
@tag = markup
end
def render(context)
jekyllSite = context.registers[:site]
items = jekyllSite.data['array'].select { |item|
item['id'] == context[@tag.strip]
}
context.environments.first['item'] = items.first
super
end
end
end
Liquid::Template.register_tag("item", Jekyll::ItemBlock)
但现在item
甚至可以在整个模块之外使用。
{% item id1 %}
<p>{{ site.data.array.length }}</p>
<p>{{ item.name }}</p>
{% enditem %}
<p>{{ item.name }}</p>
这是正确的做法吗?还有另一种方法来实现上述目标吗?