Decidí, por varias razones, unificar los blogs sobre "PHP Cinco", "Framework Pear" y "Template Smarty" en el nuevo dominio: PHP Senior.
Toda la información en este post: ¡Nos mudamos de dominio!
22.5.06
11.2.06
Respetar los "retorno de carro" de un texto de nuestra base de datos
Caso: levantamos un campo de texto de nuestra base de datos que tiene un formato con retornos de carro, es decir, tiene escritos tres párrafos separados con un [Enter].
Si nosotros tomamos ese campo, tal cual, y lo incluimos en nuestra plantilla html, nuestro texto quedará todo junto sin saltos.
Si visualizamos el código que estamos viendo desde nuestro navegador, el texto aparecerá con los "saltos de carro" correctos.
¿Por qué sucede esto?
Bueno, en HTML solo se toma en cuenta *un solo espacio*, los restantes no son tenidos en cuenta, ni tampoco los comandos que representan "retorno de carro" (\n) o los tabuladores (\t), etcétera.
¿Cómo podemos solucionarlo con Smarty?
Una expresión regular que toma el contenido "en bruto" y busca los comandos "\n" y los sustituye con un "salto de línea" en formato HTML.
De la misma forma, podríamos hacer con los "\t", y agregándoles, por ejemplo, una serie de espacios en formato html:
Simple, sencillo, directo ;-)
PD: estoy casi seguro que esta "estrategia" está escrita en algún lado, tal vez en el manual del Smarty, o en un artículo (porque vino demasiado rápido a mi cerebro ;-).
Si nosotros tomamos ese campo, tal cual, y lo incluimos en nuestra plantilla html, nuestro texto quedará todo junto sin saltos.
Si visualizamos el código que estamos viendo desde nuestro navegador, el texto aparecerá con los "saltos de carro" correctos.
¿Por qué sucede esto?
Bueno, en HTML solo se toma en cuenta *un solo espacio*, los restantes no son tenidos en cuenta, ni tampoco los comandos que representan "retorno de carro" (\n) o los tabuladores (\t), etcétera.
¿Cómo podemos solucionarlo con Smarty?
Una expresión regular que toma el contenido "en bruto" y busca los comandos "\n" y los sustituye con un "salto de línea" en formato HTML.
Resultado: si tiene un solo "retorno" (\n) se coloca uno "break", si tiene dos, agrega dos "break", dando el efecto de separación con linea en blanco.
{$elemento.texto_noticia|regex_replace:"/[\n]/":"<br>"}
De la misma forma, podríamos hacer con los "\t", y agregándoles, por ejemplo, una serie de espacios en formato html:
Simple, sencillo, directo ;-)
PD: estoy casi seguro que esta "estrategia" está escrita en algún lado, tal vez en el manual del Smarty, o en un artículo (porque vino demasiado rápido a mi cerebro ;-).
10.2.06
Sitios "multi idioma"
En este pequeño post nos cuenta como se puede armar una estructura que permita crear sitios que manejen varios idiomas, o por lo menos, tener una versión que soporte más de un idioma.
Fuente: Buayacorp
Fuente: Buayacorp
25.1.06
Manejo de Fechas: el "Copyright"
Es muy común que cuando cambiamos de año, como en este caso de 2005 a 2006, lo primero que queda desactualizado son los mensajes de "Copyright". En estos casos se manejan formatos del tipo:
Donde se maneja un rango de años, desde el inicio del sitio hasta la fecha actual.
Nota: ni idea si esta "formalidad" tiene algún peso legal, y si está basado en alguna norma, o simplemente nos fuimos copiando unos a otros hasta que se hizo "estándar".
Que sucede: en los sitios estáticos (es decir, su contenido solo cambiará si es modificado a mano) la fecha actual deberá ser actualizada, cambiando el año 2005 por el 2006.
Lo peor que podría pasar es que el sitio no fuera "modular", es decir, que cada página de nuestro sitio no tuviera "ciertos contenidos" centralizados que al modificar en un único lugar impacten en todo el sitio web.
Por ejemplo, este es un caso. Si nuestro sitio es completamente estático y cuenta con 50 páginas, deberemos recorrer y modificar el año de Copyright de las 50. Si, verdaderamente grave si para algo tan sencillo, debemos hacer tanto trabajo.
En mi caso, esta zona la considero como el "pie" del sitio, como así
también existe el "cabezal", y se encuentra en un solo archivo que es
incluido por todas las páginas del sitio. Editamos el archivo, cambiamos el año a 2006, y problema solucionado.
A pesar de todo, me queda el "retrogusto amargo" de que el año que viene tendré el mismo problema ;-), por lo consiguiente llegué a la conclusión que el último año es una información dinámica que debe darla el sistema: "el año actual"
Que podemos cambiar la línea siguiente por:
Si, di una introducción larga para darle un poco más de sentido a tan poco código ;-)
Enlaces relacionados:
¡Suertempila!
Copyright 1995-2005 - República de los Jedis
Donde se maneja un rango de años, desde el inicio del sitio hasta la fecha actual.
Nota: ni idea si esta "formalidad" tiene algún peso legal, y si está basado en alguna norma, o simplemente nos fuimos copiando unos a otros hasta que se hizo "estándar".
Que sucede: en los sitios estáticos (es decir, su contenido solo cambiará si es modificado a mano) la fecha actual deberá ser actualizada, cambiando el año 2005 por el 2006.
Lo peor que podría pasar es que el sitio no fuera "modular", es decir, que cada página de nuestro sitio no tuviera "ciertos contenidos" centralizados que al modificar en un único lugar impacten en todo el sitio web.
Por ejemplo, este es un caso. Si nuestro sitio es completamente estático y cuenta con 50 páginas, deberemos recorrer y modificar el año de Copyright de las 50. Si, verdaderamente grave si para algo tan sencillo, debemos hacer tanto trabajo.
En mi caso, esta zona la considero como el "pie" del sitio, como así
también existe el "cabezal", y se encuentra en un solo archivo que es
incluido por todas las páginas del sitio. Editamos el archivo, cambiamos el año a 2006, y problema solucionado.
A pesar de todo, me queda el "retrogusto amargo" de que el año que viene tendré el mismo problema ;-), por lo consiguiente llegué a la conclusión que el último año es una información dinámica que debe darla el sistema: "el año actual"
Código original
<!--{strip}-->
<div class="footer">
<p>Copyright 1995 - 2006 - República de los Jedis</p>
</div>
<!--{/strip}-->
Que podemos cambiar la línea siguiente por:
<p>Copyright 1995-<!--{$smarty.now|date_format:"%Y"}--> - República de los Jedis</p>
Si, di una introducción larga para darle un poco más de sentido a tan poco código ;-)
Enlaces relacionados:
¡Suertempila!
4.12.05
¿Cómo instalar rápidamente Smarty?
El problema
El template Smarty puede tener algunas dificultades a la hora de instalarlo:
Por ejemplo
Si el directorio en el servidor web es "/var/www/" y el directorio de nuestro sitio es "misitiopersonal", la ruta completa sería "/var/www/misitiopersonal".
Si nos bajamos el paquete de Smarty del sitio oficial, este vendrá comprimido y la nomenclatura del mismo será: "Smarty-2.6.10", donde la información que precede al guión hace referencia a la versión del mismo.
Tips: si queremos simplificar la instalación, configuración y uso del template, podemos modificar el nombre del directorio (o crear un link) a uno abreviado. Por ejemplo: solo "Smarty".
Los directorios que necesitamos
Se necesitan por lo menos los siguientes directorios:
<?
require_once("Smarty/libs/Smarty.class.php");
$miSmarty = new Smarty();
$miSmarty->template_dir = 'templates';
$miSmarty->config_dir = 'config';
$miSmarty->cache_dir = 'cache';
$miSmarty->compile_dir = 'templates_c';
$miSmarty->assign("titulo", "Formulario de Consultas");
$miSmarty->display("formulario.tpl.html");
?>
Incluimos la clase base "Smarty.class.php" y luego creamos la primer instancia de nuestro template, modificamos los atributos de la clase para definir donde estarán los directorios necesarios para su trabajo y creamos una variable del template (assign) y le cargamos el título del formulario ("Formulario de Consultas").
Finalmente, invocamos el template con el método "display".
Nuestro primer template
Podemos usar la nomenclatura que más nos guste; en este caso seguimos los ejemplos de la documentación oficial: nombredearchivo.tpl.html, donde "tpl" es la abreviación de template y obviamente "html" porque es un archivo con ese formato. Esto último es útil para poder editar el archivo en nuestro editor HTML de preferencia.
Deberemos tener creado el archivo "formulario.tpl.html" en el directorio "template" con el siguiente contenido:
{$titulo}
Donde el "{$titulo}" será sustituido con el contenido especificado en archivo PHP.
En Resumen
Logramos instalar Smarty sin depender de la configuración del servidor, sin necesitar tener acceso como administradores. Logramos modificar su comportamiento, creamos la primer instancia del objeto y logramos ejecutar el primer template.
Ahora que el entorno está pronto, tenemos el camino abierto para aprender a usarlo, solo queda leer el manual! ;-)
En próximos artículos abordaremos los temas iniciales de como empezar a usar el motor de templates Smarty.
¡Saludos!
El template Smarty puede tener algunas dificultades a la hora de instalarlo:
- No tenemos control del servidor donde alojamos nuestro sitio, solo de un directorio.
- No tenemos conocimientos suficientes para configurar el servidor web.
- Hemos seguido el tutorial de la página oficial pero tuvimos problemas al entenderlo o simplemente no pudimos seguir los pasos.
- Estamos en Windows usando algún software que nos provee el entorno de desarrollo (Apache, PHP, MySQL, etc) pero no Smarty, y el tutorial de instalación no contempla este contexto.
- etcétera.
El template Smarty, al final de cuentas, es un conjunto reducido de clases que ofrecen la funcionalidad de "templates html" para nuestros desarrollos basados en PHP, donde terminamos usando una instancia (POO) para manipular la información y el comportamiento del motor de templates.
Una solución fácil y rápida
Bajar el paquete Smarty y descomprimirlo en el directorio donde se encuentra nuestro sitio web. Si no tenemos acceso a la línea de comandos en el servidor, lo bajamos en nuestro equipo de desarrollo, descomprimimos el paquete, y luego subimos el directorio entero a nuestro sitio.
Bajar el paquete Smarty y descomprimirlo en el directorio donde se encuentra nuestro sitio web. Si no tenemos acceso a la línea de comandos en el servidor, lo bajamos en nuestro equipo de desarrollo, descomprimimos el paquete, y luego subimos el directorio entero a nuestro sitio.
Por ejemplo
Si el directorio en el servidor web es "/var/www/" y el directorio de nuestro sitio es "misitiopersonal", la ruta completa sería "/var/www/misitiopersonal".
Si nos bajamos el paquete de Smarty del sitio oficial, este vendrá comprimido y la nomenclatura del mismo será: "Smarty-2.6.10", donde la información que precede al guión hace referencia a la versión del mismo.
Tips: si queremos simplificar la instalación, configuración y uso del template, podemos modificar el nombre del directorio (o crear un link) a uno abreviado. Por ejemplo: solo "Smarty".
Los directorios que necesitamos
Se necesitan por lo menos los siguientes directorios:
- templates: este directorio contendrá los templates para nuestras páginas web, es decir, los archivos .html que contienen código html con la posibilidad de ser invocado desde un PHP.
- templates_c: es el directorio temporal donde el sistema lee los templates del directorio anterior y genera un nuevo html de forma dinámica con el código resuelto, es decir, código html y la sustitución de todas las variables cargadas y las sentencias propias resultas por el Smarty. Este resultado es la "página final", lo que recibirá el usuario cuando navegue nuestro sitio web.
<?
require_once("Smarty/libs/Smarty.class.php");
$miSmarty = new Smarty();
$miSmarty->template_dir = 'templates';
$miSmarty->config_dir = 'config';
$miSmarty->cache_dir = 'cache';
$miSmarty->compile_dir = 'templates_c';
$miSmarty->assign("titulo", "Formulario de Consultas");
$miSmarty->display("formulario.tpl.html");
?>
Incluimos la clase base "Smarty.class.php" y luego creamos la primer instancia de nuestro template, modificamos los atributos de la clase para definir donde estarán los directorios necesarios para su trabajo y creamos una variable del template (assign) y le cargamos el título del formulario ("Formulario de Consultas").
Finalmente, invocamos el template con el método "display".
Nuestro primer template
Podemos usar la nomenclatura que más nos guste; en este caso seguimos los ejemplos de la documentación oficial: nombredearchivo.tpl.html, donde "tpl" es la abreviación de template y obviamente "html" porque es un archivo con ese formato. Esto último es útil para poder editar el archivo en nuestro editor HTML de preferencia.
Deberemos tener creado el archivo "formulario.tpl.html" en el directorio "template" con el siguiente contenido:
{$titulo}
Donde el "{$titulo}" será sustituido con el contenido especificado en archivo PHP.
En Resumen
Logramos instalar Smarty sin depender de la configuración del servidor, sin necesitar tener acceso como administradores. Logramos modificar su comportamiento, creamos la primer instancia del objeto y logramos ejecutar el primer template.
Ahora que el entorno está pronto, tenemos el camino abierto para aprender a usarlo, solo queda leer el manual! ;-)
En próximos artículos abordaremos los temas iniciales de como empezar a usar el motor de templates Smarty.
¡Saludos!
9.5.05
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 de la lógica.
Separar las "responsabilidades" en capas; 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:
Referencias:
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 de la lógica.
Separar las "responsabilidades" en capas; 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:
- Smarty:
date_format - PHP:
number_format
Suscribirse a:
Entradas (Atom)