gpt4 book ai didi

liquid - 带有两个参数的自定义 Liquid 标签

转载 作者:行者123 更新时间:2023-12-04 00:08:02 24 4
gpt4 key购买 nike

如何使用两个参数编写/调用自定义液体标签?

上下文: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 时,显示的选项卡应该看起来不同(
  • ...)。而这个可以 通过上面链接的技术来解决,这很丑陋:
    {% 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 %}

    我有两个问题:
  • mytab 只接收一个输入,通常称为文本,包含 {% ... %} 中的所有内容,而我需要两个单独的值。我可以使用 Tag split(',') 或其他东西,但还有其他问题吗?
  • 它没有被解释:它的字面意思是“ extra_tab[0] extra_tab[1] ”。

  • 那么:如何诱导 Liquid 将引用扩展到“extra_tab[*]”?

    最佳答案

    我有一个类似的问题。我希望能够做到以下几点:

    {% 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

    关于liquid - 带有两个参数的自定义 Liquid 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480950/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com