2011-10-05 23 views
11

He escrito una etiqueta personalizada en líquido, y me gustaría pasarle una variable. Las etiquetas de líquido convertirán cualquier parámetro en una cadena.¿Cómo pasar una variable a una etiqueta personalizada en Liquid?

Por ejemplo:

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

Cuando la página es una variable.

¿Hay alguna manera de hacer que Liquid trate la página como una variable y no como una cadena?

¡Gracias de antemano!

+0

debería mencionar esta pregunta es específicamente sobre Jekyll pero aplicable a cualquier etiqueta personalizada líquido. –

+3

Ver: 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

Respuesta

11

Si está utilizando Jekyll específicamente, puede acceder a la variable de página de esta manera:

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

OK, puedo acceder al hash líquido de una publicación de esta manera. ¿Hay alguna forma de acceder al objeto 'Post' desde' context'? –

+0

¡Esto realmente debería entrar en la documentación de Jekyll! – Sebi

5

que tenía un problema similar. Lo resuelto mediante la creación de un método de búsqueda personalizada:

def look_up(context, name) 
    lookup = context 

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

    lookup 
end 

Para usarlo, crear algo como esto:

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

Para responder a la pregunta de carácter general y no la parte específicamente de la variable de página, se puede también pasar el contenido de la etiqueta a través del analizador de líquido de nuevo:

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

def render(context) 
    content = Liquid::Template.parse(@markup).render context 
end 
Cuestiones relacionadas