Ruby es uno de los idiomas más populares utilizados en la web. Comenzamos una nueva sesión aquí en Nettuts + que te presentará a Ruby, así como a los excelentes marcos y herramientas que acompañan el desarrollo de Ruby. En este episodio, veremos Tilt, una gema envolvente todo incluido para los motores de plantillas Ruby..
Si ha utilizado un sitio web de Ruby, como Rails y Sinatra, es probable que esté familiarizado con al menos uno de los muchos motores de plantillas disponibles: se trata de opciones como ERB o Haml. Cuando se utilizan en el contexto de un marco, es bastante simple? pero a veces parecen muy arraigadas; ¿Y si quieres usarlos en tu propio proyecto? ¿Hay una manera fácil de aprovechar su utilidad??
Entra en la gema Tilt. Diseñado como una "interfaz delgada sobre un montón de diferentes motores de plantillas de Ruby" Usted encontrará que hace que las plantillas de renderizado sean una brisa.
Por supuesto, lo instalaremos primero..
inclinación de instalación de gemas
Si no está usando RVM (que debería ser), es posible que tenga que ejecutar eso con privilegios de root (sudo
).
Por supuesto, necesitarás comenzar con una plantilla para renderizar. Lo mantendremos simple:
<%= title %> Algunos de los sitios de Tuts +
Guardar esto en tutsplus.erb
. Tenga en cuenta que el texto del título se insertará con Ruby, así como la lista de sitios. Ahora, vamos a renderizarlo. Lo haremos de esta manera (guarda esto en using_tilt.rb
):
requiere sitios 'tilt' = "Nettuts +" => "http://net.tutsplus.com", "Psdtuts +" => "http://psd.tutsplus.com", "Mobiletuts +" => "http: / /mobile.tutplus.com "," Audiotuts + "=>" http://audio.tutsplus.com " context = Object.new def context.title" Tuts + Sites "end template = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "do | file | file.write template.render (contexto, sitios: sitios) final
Por supuesto, comenzamos requiriendo Tilt. Luego, creamos nuestros datos para la plantilla: un hash simple, así como un objeto de vainilla simple. Le damos al objeto una propiedad: título
. Entonces, creamos nuestro objeto de plantilla. Aquí, estamos creando una instancia de la Inclinación :: ERBTemplate
clase, pero el punto central de Tilt es que puede usar cualquier motor de plantilla que desee: por ejemplo, puede usar la Inclinación :: Plantilla Haml
, Inclinación :: SassTempalte
(para CSS), Inclinación :: Plantilla CoffeScript
(para CoffeeScript), o el motor de plantillas compatible que desee Sin embargo, es importante tener en cuenta que Tilt es solo un envoltorio: debe requerir la biblioteca adecuada para el motor de plantillas que desea utilizar. Así que, si quieres usar un Inclinación :: Plantilla Haml
caso, necesitas requiere 'haml'
. Puede ver qué bibliotecas se requieren para cada motor de plantilla en el archivo Léame.
Finalmente, abrimos el archivo en el que queremos escribir la salida. El HTML (o CSS, o JavaScript, dependiendo de la plantilla y el motor que esté utilizando) se devolverá desde el hacer
Método del objeto plantilla. los hacer
El método toma dos parámetros. El primero es un objeto de contexto: todas las propiedades de este objeto estarán disponibles como variable dentro de la plantilla. Entonces nuestro contexto.título
La propiedad estará disponible como solo título
dentro de la plantilla. Si hay otros valores que desea pasar a la plantilla, páselos como parte del segundo parámetro, que es un hash.
Entonces, podemos ejecutar este script en la línea de comando:
ruby using_tilt.rb
Ahora, busque en el directorio en el que ha estado guardando estos archivos: debería ver una sites.html
expediente. Si lo ves, verás que la plantilla se ha renderizado:
Puedes hacer cosas más complejas con Tilt si pasas un bloque a la hacer
método.
Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "some text"
Dentro de tu plantilla, puedes rendimiento
a la cuadra todo lo que se devuelva desde el bloque se insertará en ese punto de la plantilla.
Aunque puede, por supuesto, simplemente pasar una cadena a través del bloque, como se muestra arriba, hay un caso de uso más interesante. Recientemente, he estado usando esta funcionalidad en Tilt para incrustar una plantilla específica de página dentro de un shell de todo el sitio. Por ejemplo, podemos dividir nuestra plantilla anterior en dos archivos:
<%= title %> <%= yield %>
Algunos de los sitios de Tuts +
Ahora, para renderizar nuestra página, podemos hacer esto:
template = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" do | file | file.write template.render (contexto) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, sites: sites) end
Tenga en cuenta que, como no teníamos ningún objeto que quisiéramos usar como objeto de contexto, simplemente pasamos un objeto Ruby en blanco puro. El HTML que se devuelve de la prestación de sitios.erb
se insertará donde el rendimiento
palabra clave es. Si ejecuta el código anterior, debería ver el mismo resultado que antes.
Notará que, hasta ahora, hemos tenido que elegir el motor de plantilla que queremos utilizar al crear el objeto de subclase de inclinación. Sin embargo, Tilt reconocerá la extensión de archivo de la plantilla que se le pasa, por lo que no tiene que elegir explícitamente un motor: elegirá la correcta, según la extensión de archivo:
t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate
Si, por alguna razón, sus plantillas tienen una extensión de archivo que no es lo que esperaría Tilt, puede registrarlo:
Tilt.register Tilt :: ERBTemplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate
Hay algunas cosas más de nicho que Tilt puede hacer; Si está interesado en obtener más información, le recomiendo que consulte la documentación..