Frontend
Helpers personalizados#
Este documento solo aplica cuando se usa github.com/gobuffalo/buffalo/render.
Consulta github.com/gobuffalo/plush para más detalles sobre el paquete de plantillas.
Ningún paquete de plantillas estaría completo sim permitirte construir tus propias funciónes helper personalizadas.
Registrar Helpers#
Las funciónes helpers se pueden registrar en dos diferentes lugares, dependiendo de como se vayan a usar.
Helper globales#
La mayoría de helpers seran helpers globales, esto quiere decir que se podrán incluir en cualquier plantilla. Los tipos de helpers pueden ser establecidos en actions/render.go
:
func init() {
r = render.New(render.Options{
// ...
Helpers: render.Helpers{
"myHelper": func() string {
return "hello"
},
},
// ...
})
}
Helpers por petición#
Otros helpers, que son específicos a una determinada petición se pueden agregar al buffalo.Context
de esa petición.
func HomeHandler(c buffalo.Context) error {
// ...
c.Set("myHelper", func() string {
return "hello"
})
// ...
}
Valores retornados#
Plush te permite retornar cualquier valor que desees de una función helper. Esta guía se enfocará en los helpers que estan diseñados para generar “salidas”.
Cuando retornamos multiples valores de una función, el primer valor será el que se use para renderizar en la plantilla.
Si el ultimo valor retornado es un error
, Plush manejará ese error.
string
#
Retornar sólo un string
. El string
será escapado de HTML y considerada “no” seguro.
func() string {
return ""
}
template.HTML
#
https://golang.org/pkg/html/template/#HTML
Retornar sólo una cadena de template.HTML
. El template.HTML
no será escapado de HTML y será considerado seguro.
func() template.HTML {
return template.HTML("")
}
Valores de entrada#
Las funciónes helper personalizadas pueden tomar cualquier tipo, y cualquier numero de argumentos. Incluso puede utilizar funciónes variádicas. Hay un ultimo argumento opcional: plush.HelperContext
, que se puede recibir. Es bastante útil, y te recomendaría tomarlo, ya que te proporciona acceso a cosas como el contexto de la llamada, el bloque asociado al helper, etc…
Helpers simples#
r := render.New(render.Options{
// ...
Helpers: render.Helpers{
"greet": func(name string) string {
return fmt.Sprintf("Hi %s!", name)
},
},
// ...
})
La función greet
ahora está disponible para todas las plantillas que usen ese motor render.Engine
.
// actions/greet.go
func Greeter(c buffalo.Context) error {
c.Set("name", "Mark")
return c.Render(http.StatusOK, r.String("<h1><%= greet(name) %></h1>"))
}
// output
<h1>Hi Mark!</h1>
Helpers en bloque#
Como las sentencias if
o for
, los helpers en bloques toman un “bloque” de texto que se puede evaluar y potencialmente renderizar, manipular o lo que quisieras.
Para escribir un helper en bloque, tienes que tomar el plush.HelperContext
como el último argumento de tu función helper. Esto te dará acceso al bloque asociado con esa llamada.
r := render.New(render.Options{
// ...
Helpers: render.Helpers{
"upblock": upblock,
},
// ...
})
Obteniendo valores del contexto#
r := render.New(render.Options{
// ...
Helpers: render.Helpers{
"is_logged_in": isLoggedIn,
},
// ...
})