Usando templates desde PHP: Smarty

Escrito el 4 Septiembre, 2002 – 10:00 | por storm | 4.051 lecturas

En muchas oportunidades el desarrollo de sitios o aplicaciones implica crear interfaces HTML para aplicaciones escritas en PHP, el uso de templates permite separar elegantemente el codigo PHP de su presentacion, hay varios motores de templates, en esta nota presentamos Smarty, sin dudas la opcion mas poderosa.

Introduccion

Smarty es un motor de templates para PHP desarrollado por Andrei Zmetvski, autor entre otras cosas de la extension GTK para PHP4, Smarty ofrece varios “features” bastante poderosos:

  • Los templates son compilados a PHP para evitar parsearlos n veces.
  • Smarty puede detectar cuando un template ha cambiado y lo recompila automaticamente
  • Smarty viene con un muy buen conjunto de instrucciones que pueden usarse desde un template para generar ciclos, listas, formatear texto, etc.
  • Smarty es muy simple de instalar y no requiere ninguna extension en particular para funcionar, solo PHP 4.0.5 o superior.
  • Smarty incluye un sistema de cache para cachear las paginas dinamicas o porciones de paginas dinamicas en caso de que se quiera.

Instalacion

Smarty se puede dowlodear desde smarty.php.net, la instalacion implica unicamente copiar la distribucion a un subdirectorio accesible desde la aplicacion, nosotros en esta nota usamos el subdirectorio Smarty para la instalacion de Smarty.

Configuracion

Para configurar Smarty simplemente hay que hacer un include , redefinir la clase Smarty indicando los directorios que deben usarse y luego instanciar un objeto de la nueva clase, veamos un ejemplo pues el proceso es sencillo

define('SMARTY_DIR',"smarty/");
require_once(SMARTY_DIR.'Smarty.class.php');

class Smarty_new extends Smarty {
  function Smarty_new() {
    $this->teplate_dir = "templates/";
    $this->compile_dir = "templates_c/";
    $this->config_dir = "configs/";
    $this->cache_dir = "cache/";
    $this->caching = false;
    //$this->debugging = true;
    //$this->debug_tpl = 'debug.tpl';
  }
}

$smarty = new Smarty_new();

Como pueden ver necesitamos indicar los directorios para templates (smarty/templates), templates compilados (smarty/templates_c), archivos de configuracion y cache. Notar que los directorios son relativos al directorio en donde esta Smarty (definido con SMARTY_DIR) y no a la aplicacion. En la clase tambien setamos si queremos usar el sistema de cache y si queremos un popup de debug para los templates. (Descomentar las dos lineas comentadas). Una vez hecho esto el objeto “smarty” es el que usaremos para mostrar templates.

Creando un template

Empecemos por crear el template hola.tpl que deberemos colocar en el directorio de templates (smarty/templates) en nuestro ejemplo:

Hola mi nombre es {$nombre}

Como podemos ver el template es una mezcla de codigo HTML y directivas a smarty (entre llaves) en este caso lo que hacemos es mostrar el contenido de la variable de smarty $nombre.Las variables deben generarse y asignarse desde PHP veamos como:

Podemos crear un script php denominado hola.php que sea de la forma:

assign('nombre','Juan');
$smarty->display('hola.tpl');
?gt;

El script asigna a la variable de smarty ‘nombre’ el string ‘Juan’ y luego muestra el template ‘hola.tpl’ el resultado es el que pueden imaginar, una pantalla html que dice ‘Hola juan’.

El estilo de vida Smarty

El concepto es muy simple, los scripts hacen todo el procesamiento, acceden a la base de datos, usan sesiones, procesan forms y luego simplemente lo que estamos interesados en mostrar en la pagina lo asignamos a variables smarty a partir de variables PHP usando $smarty->assign(‘foo’,$foo); por ejemplo, luego invocamos un template usando $smarty->display(‘algo.tpl’);. En el template ponemos nuestro codigo HTML y podemos acceder a las variables asignadas a smarty.

Notemos que esto permite claramente separar codigo de presentacion, asi como tenemos templates HTML podemos crear templates WML sin necesidad de cambiar el codigo PHP solamente la forma en que lo presentamos, como la logica es la misma y no aparece en los templates los diseniadores pueden cambiar facilmente la forma de visualizar un sitio o aplicacion sin necesidad de saber nada sobre PHP.

Queres ver mas?

Lo presentado es lo basico, smarty provee varias funciones e instrucciones que pueden usarse desde templates, por ejemplo la instruccion {section} sirve para recorrer un vector y mostrarlo en el template (para listas, tablas, etc). Smarty permite que el programador agregue tambien sus propios plugins o funciones, de esta forma es posible extender el motor para que haga exactamente lo que queremos.

Hay mucho mas para contar sobre Smarty y para mostrar, esperamos que esta introduccion sea suficiente para comenzar a desarrollar algunas cosas con Smarty y esperamos bridarles una nueva nota sobre Smarty pronto. Los comentarios son como siempre bienvenidos.

Garland Foster

You must be logged in to post a comment.

Buscar: