2015-04-06 40 views
1

如何使用兩個參數編寫/調用自定義液體標籤?帶兩個參數的自定義液體標籤

語境:傑奇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 %} 

我有兩個問題:

  1. MYTAB正在接收僅一個輸入端,通常稱爲文本,包含{%...%}中的所有內容,而我需要兩個單獨的值。我可以將標籤拆分(',')或其他東西,但還有其他問題?
  2. 它沒有被解釋:它實際上是「extra_tab [0] extra_tab [1]」。

所以:我如何誘使Liquid擴展引用「extra_tab [*]」?

回答

2

我也有類似的問題。我希望能夠做到以下幾點:

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

嗯,我想我可以讓mytag是塊標記。這涉及到endmytag標記接近的混亂,但是這並不壞SOOOOO:

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