Smarty: Formato numérico y formato de fecha

En mi trabajo uso constantemente PHP, y para separar la "capa de presentación" de la "lógica del negocio", uso Smarty, el template por naturaleza para PHP (de la misma forma, el framework Pear) ;-)

Hace poco terminé con lo fundamental de la reingeniería del portal para el cual trabajo, lo que me llevó más de lo esperado (lo que no es raro tampoco, en mi experiencia ;-). Por suerte, pude decir que toda la lógica y la presentación, en esencia, estaba concluida.

Nota: La idea de la "capa de presentación" es, a grades rasgos, que la "lógica" procese, y la "presentación" muestre, o le de formato, a la información que recibe.

Que una capa no haga el trabajo de la otra, es fundamental.

Terminé primero, según lo dicta las leyes del buen programador sobreviviente, con todas las taréas que ofrecían el mayor valor agregado desde el punto de vista de los usuarios y los clientes del sitio (que no son lo mismo), y dejé para lo último las tareas menores (títulos, fechas, redondeos, formatos, etc).

Generalmente mi suerte no me ayuda en estos casos, y lo que pensé que era solo 30 minutos, se transformó en tarea de un par de horas.

Y como resumen, quiero dejar para la posteridad, los resultados:


  • Tags del Template: En Smarty se usan los {} para encerrar el código referente al template y separarlo del código puro html. Hace tiempo que modifico la configuración para que use la combinación de tag de html (Escaping Smarty Parsing). El resultado es que puedes levantar el código del template, que generalmente tiene de extensión ".tpl.html", en cualquier editor html y no verás los tag's del template. Esto es muy útil para cuando quieres delegar este tipo de trabajos a alguien que se dedique al diseño gráfico, etc.

  • Formato de Fecha: Si quieres darle formato a la fecha, deberás hacer lo siguiente:

    {$fecha | date_format:"%d/%m/%Y"}

    Recibe: "2005-04-26" Devuelve: "26/04/2005"
    {$fecha | date_format:"%A %d/%m/%Y - %H:%M hs."
    | capitalize}

    Recibe: "2005-05-04 16:00:00-03" Devuelve: "Miércoles 04/05/2005 - 16:00 Hs."



  • Formato numérico: Esto fue más dificil, pues la documentación tanto de Smarty como de PHP es muy escueta. Lo natural es que los números se muestren solo con el separador "." en los decimales. El tema se complica cuando quieres que el separador de decimales sea una ",", y los miles un ".". La solución (que me llevó una hora, y espero ahorrarles ese tiempo):
    {$importe|number_format:2:',':'.'}

    Recibe: "1808029.63"
    Devuelve: "1.808.029,63"


Referencias:

2 comentarios:

Benjamín Orbaiz Echavarren dijo...

Hola Enrique, menuda explicación te has currado! Me has ahorrado mucho mas que una hora, hace dias que estaba con esto y iva a estar muchos mas (hombre, que los ejemplos en ingles son incomprensibles). Muchas gracias por el truquillo, y sigue asi!

enrique_place dijo...

A mi me llevó un poco más de tiempo sacarlo porque los ejemplos que aparecen en la documentación (particularmente sobre este tema) son muy sencillos.

No te olvides que ahora existe la traducción al castellano de la documentación del Smarty, lo que puede que quede un poco más ameno leer.

Entradas populares