Tratando de entender para qué sirven los blogs
El maravilloso mundo de smarty
Acabo de terminar la interfaz gráfica de un software libre (whale) y para armar toda la interfaz utilicé smarty. Smarty son unas clases de PHP que permiten el uso de plantillas.
Lo fantástico del uso de estas plantillas es que tienen un reducido (pero muy util) set de funciones e intrucciones que se pueden poner dentro de al plantilla, para darle algo de “inteligencia”.
En el sitio de smarty hay un (muy bien armado) Crash Course, que muestra rápidamente cómo se utilizan.
Lo que más me gustó fue cuando tuve que hacer dos cosas:
- Internacionalizar la interfaz
- Cambiar el content-type de la salida de un formulario para que en vez de mostrarlo en HTML, haga que el navegador pida ejecutar otra aplicación para editar el archivo enviado (en este caso, la salida era un archivo CSV que es editable con casi cualquier planilla de cálculo)
Para internacionalizar la interfaz utilicé un hack de un tal André Rabold que extendió la clase de Smarty, para permitir cambiar ciertos strings definidos en un archivo de idioma por su significado en el idioma que se desea mostrar. El hack se llama SmartyMultilanguageSupport, y además de ser muy útil, detecta el idioma con el que esta seteado el navegador, permitiendo que el usuario vea la interfaz en su idioma natal.
Para resolver lo segundo, utilicé algo muy sencillo que es la función header() de PHP, dependiendo el botón que haya apretado el usuario (botones disponibles: “Recuperar Archivo” o “Aceptar” … para pedir que la información requerida en el formulario se muestre en el navegador) defino qué plantilla se va a utilizar y le aplico (o no) la función header().
Por ejemplo:
if (!$csvoutput) {
$smarty->assign(“tpl_name”, “drr.tpl”);
$smarty->display(‘main.tpl’);
} else {
$fdate = strftime(“%Y-%m-%d”,$sdate);
header(“Content-Type: text/csv”);
header(“Content-Disposition: inline; filename=dayreport-$fdate.csv “);
$smarty->display(‘drr-csv.tpl’);
}
Dentro del directorio templates, la plantilla drr-csv.tpl contiene:
##POSITION##,##HOST##,##CONNECTIONS##,##BYTES##
{foreach key=sid item=site from=$sites}
{counter assign=”count”} {$count},{$site.host},{$site.conns},{$site.total_bytes}{/foreach}
En el caso de la misma plantilla pero para HTML, tiene básicamente lo mismo pero todo lleno de tags HTML (obviamente).
De no haber hecho esta interfaz utilizando Smarty creo que todavía estaría escribiendo código y me volvería loco para internacionalizarla y poder cambiar content-type(s) tan fácilmente.
Recomiendo su uso para todo interfaz desarrollada en PHP.
Suerte!
dax///
| Print article | This entry was posted by Daniel on 21 March 2006 at 11:38, and is filed under Revisiones de Software, Técnicos. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
about 1 year ago
No tiene un ejemplo de la utilizacion de SmartyMultilanguageSupport por fa … tengo algunos errores… gracias …