2011-10-05 94 views
11

我已經寫了一個自定義標籤在液體中,我想通過一個變量。液體標籤將把任何參數變成一個字符串。如何將變量傳遞給Liquid中的自定義標籤?

例如:

{% nav page /some/url.html %} 

如果頁面是一個變量。

有沒有辦法讓Liquid將頁面當作變量而不是字符串?

在此先感謝!

+0

我應該提到這個問題是關於Jekyll,但適用於任何Liquid自定義標籤。 –

+3

參見:http://stackoverflow.com/questions/7919644/using-liquid-variables-inside-of-a-liquid-tag-call http://stackoverflow.com/questions/7259385/resolve-liquid-variable-內部液體標籤 – nickf

回答

11

如果你是專門使用化身,你可以訪問該網頁的變量是這樣的:

def render(context) 
    page_url = context.environments.first["page"]["url"] 
+1

好的,我可以通過這種方式訪問​​帖子的液體散列。有沒有辦法從'context'訪問'Post'對象? –

+0

這真的應該進入Jekyll文檔! – Sebi

5

我也有類似的問題。我解決它通過創建一個自定義的查找方法:

def look_up(context, name) 
    lookup = context 

    name.split(".").each do |value| 
    lookup = lookup[value] 
    end 

    lookup 
end 

要使用它,創建這樣的:

def initialize(tag_name, markup, tokens) 
    @markup = markup 
    super 
end 

def render(context) 
    output = super 
    if @markup =~ /([\w]+(\.[\w]+)*)/i 
    @myvalue = look_up(context, $1) 
    end 

    do_something_with(@myvalue) 
end 
2

要回答的一般問題,而不是部分專門關於頁面變量,可以再次通過Liquid解析器傳遞標籤的內容:

def initialize(tag_name, markup, tokens) 
    @markup = markup 
    super 
end 

def render(context) 
    content = Liquid::Template.parse(@markup).render context 
end 
相關問題