2011-10-05 25 views
11

Tôi đã viết một thẻ tùy chỉnh bằng chất lỏng và tôi muốn chuyển một biến cho nó. Thẻ chất lỏng sẽ biến bất kỳ thông số nào thành chuỗi.Làm cách nào để chuyển một biến vào thẻ tùy chỉnh trong Liquid?

Ví dụ:

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

đâu trang là một biến.

Có cách nào để có được Chất lỏng để xử lý trang dưới dạng biến và không phải là chuỗi không?

Cảm ơn trước!

+0

Tôi nên đề cập đến câu hỏi này đặc biệt về Jekyll nhưng có thể áp dụng cho bất kỳ thẻ tùy chỉnh Liquid nào. –

+3

Xem: http://stackoverflow.com/questions/7919644/using-liquid-variables-inside-of-a-liquid-tag-call http://stackoverflow.com/questions/7259385/resolve-liquid-variable- inside-liquid-tag – nickf

Trả lời

11

Nếu bạn đang sử dụng Jekyll đặc biệt, bạn có thể truy cập vào biến trang theo cách này:

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

OK, tôi có thể truy cập băm chất lỏng của bài đăng theo cách này. Có cách nào để truy cập đối tượng 'Post' từ' context' không? –

+0

Điều này thực sự nên đi vào tài liệu Jekyll! – Sebi

5

Tôi đã có một vấn đề tương tự. Tôi giải quyết nó bằng cách tạo ra một phương pháp tra cứu tùy chỉnh:

def look_up(context, name) 
    lookup = context 

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

    lookup 
end 

Để sử dụng nó, tạo ra một cái gì đó như thế này:

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

Để trả lời các câu hỏi chung và không phải là một phần đặc biệt về biến trang, bạn có thể cũng chuyển nội dung của thẻ thông qua trình phân tích cú pháp chất lỏng một lần nữa:

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

def render(context) 
    content = Liquid::Template.parse(@markup).render context 
end 
Các vấn đề liên quan