如何使用两个参数编写/调用自定义液体标签?
背景:Jekyll 2.1.1
我有一些页面显示为标签集。我的页面前端允许为某些页面定义额外的选项卡,如下所示:
---
blah: blah
extra-tabs:
- A page: a-page.md
- Another page: other-page.md
---
感谢Iterate over hashes in Liquid Templates,我可以解决这个问题。但是......
我有一个额外的约束:当渲染a-page.md时,显示的标签应该看起来不同(< li class =" active"> ...)。虽然这个 可以 通过上面链接的技术解决,但它很难看:
{% for extra_tab_hash in page.extra-tabs %}
{% for extra_tab in extra_tab_hash %}
{% if page.name == extra_tab[1] %}
<li class="active"><a href="#">{{extra_tab[0]}}</a></li>
{% else %}
<li><a href="{{ extra_tab[1] | in2out }}">{{extra_tab[0]}}</a></li>
{% endif %}
{% endfor %}
{% endfor %}
我想编写一个自定义标记来替换条件if / else / endif,如:
{% for extra_tab_hash in page.extra-tabs %}
{% for extra_tab in extra_tab_hash %}
{% mytab extra_tab[0] extra_tab[1] %}
{% endfor %}
{% endfor %}
我有两个问题:
那么:我如何诱导Liquid扩展对&#34; extra_tab [*]&#34;?
的引用答案 0 :(得分:4)
我有类似的问题。我希望能够做到以下几点:
{% mytag {{ page.var }} {{ captured_var }} %}
或您的情况:
{% mytab {{ extra_tab[0] }} {{ extra_tab[1] }} %}
可以在自己的标签输入中进行液体膨胀。为此,您可以使用当前上下文从标记内容中创建模板:
rendered_input = Liquid::Template.parse(@input).render(context)
当你在自定义标签的渲染功能开始时使用它时,你有一个带有液体扩展的标签:
module Jekyll
class TestTag < Liquid::Tag
def initialize(tag_name, text, token)
super
@input = text
end
def render(context)
rendered_input = Liquid::Template.parse(@input).render(context)
# do fancy stuff with rendered_input
end
end
end
答案 1 :(得分:0)
好吧,我想我可以让 mytag 成为块标记。这会让 endmytag 标签更加混乱,但这并不是太糟糕了:
{% for extra_tab_hash in page.extra-tabs %}
{% for extra_tab in extra_tab_hash %}
{% mytab %} {{extra_tab[0]}}, {{extra_tab[1]}} {% endmytab %}
{% endfor %}
{% endfor %}