Trucos para Smarty: 1. Crea tu propia clase Smarty
Mi primera recomendación es que no trabajen directamente con Smarty, sino con una clase hija. Esto da mucha flexibilidad a la hora de configurar el comportamiento del Smarty.
Empezando por lo más básico, esta es la estructura de directorios que suelo utilizar para programar en PHP (visto desde DOCROOT, el directorio raíz del proyecto):
drwxr-xr-x ./classes
drwxr-xr-x ./classes/db/
drwxr-xr-x ./classes/template/
-rw-r--r-- ./classes/smarty/
drwxr-xr-x ./config
drwxr-xr-x ./i18n
drwxr-xr-x ./i18n/es
drwxr-xr-x ./i18n/en
drwxr-xr-x ./pubs
drwxr-xr-x ./smartystuff
drwxrwxrwx ./smartystuff/cache
drwxrwxrwx ./smartystuff/compile
drwxr-xr-x ./templates
Además siempre que puedo incluyo el directorio DOCROOT en el include path de PHP para que todos los requires e includes partan de una misma base.
He creado un archivo básico de configuración en el que almaceno las distintas variables que necesito para la configuración (más adelante lo complementaré con más información).
Archivo: DOCROOT/config/config_basic.php
<?php $_CONFIG['doc_base'] = '/var/www/smarty/'; $_CONFIG['uri_base'] = '/'; $_SMARTY_CONFIG['templates_dir'] = $_CONFIG['doc_base'] . 'templates/'; $_SMARTY_CONFIG['conf_dir'] = $_CONFIG['doc_base'] . 'confs/'; $_SMARTY_CONFIG['cache_dir'] = $_CONFIG['doc_base'] . 'smartystuff/cache/'; $_SMARTY_CONFIG['compile_dir'] = $_CONFIG['doc_base'] . 'smartystuff/compile/'; ?>
Aquí ya podemos ver las configuraciones básicas del Smarty, así que siguiendo este primer truco creamos una clase que extienda a Smarty y en la que se aplique toda esta configuración.
Archivo: DOCROOT/classes/template/MySmartyBasic.php
<?php require_once 'config/config_basic.php'; require_once 'classes/smarty/libs/Smarty.class.php'; class MySmarty extends Smarty { var $lang; function MySmarty($caching = null) { global $_SMARTY_CONFIG; $this->Smarty(); // Parent constructor. Important! $this->template_dir = $_SMARTY_CONFIG['templates_dir']; $this->config_dir = $_SMARTY_CONFIG['conf_base_dir']; $this->compile_dir = $_SMARTY_CONFIG['compile_dir'] ; $this->cache_dir = $_SMARTY_CONFIG['cache_dir']; $this->compile_check = true; $this->cache_modified_check = true; $this->caching = (isset($caching) ? $caching : $_SMARTY_CONFIG['use_cache']); } } ?>
Hecho esto, ya toda la configuración del Smarty está centralizada en un sólo sitio, facilitando la extensibilidad de Smarty sin tener que modificar la clase directamente.
Ya con esto podemos colocar nuestros archivos de template en DOCROOT/templates/ (donde ROOT es la raíz de nuestro proyecto) y los confs en DOCROOT/confs/.
De esta forma un ejemplo básico de uso sería con los siguientes archivos
Archivo: DOCROOT/templates/ejemplo1.tpl
{config_load file="ejemplo1.conf"} <html> <body> {#hello#} {$name} </body> </html>
Archivo: DOCROOT/confs/ejemplo1.conf
hello=Hola
Archivo: DOCROOT/pubs/ejemplo1.php
<?php require_once 'classes/template/MySmartyBasic.php'; $tpl = new MySmarty(); $tpl->assign('name', 'Paolo'); $tpl->display('ejemplo1.tpl'); ?>
y listo.
Pedro
Chamo.. esta muy bueno el artículo, aunque en personal me gusta más TBS (http://tinybutstrong.com/) que Smarty, sobre todo porque involucra muchos menos archivos y está muy fácil de utilizar, quizas pudieramos escribir un articulo entre los dos para confrontar las ventajas y desventajas de cada uno.
Saludos amigo,
Mar 12th, 2008
pragone
Pedro… claro que sí.
La verdad es que el uso de Smarty lo he heredado y no decidido, sin embargo, se puede optimizar mucho, y obtener un performance muy bueno (cargando pocos archivos, poco código adicional, etc).
Mar 12th, 2008