Iniciando Que es Smarty? Smarty es un motor de plantillas para PHP. Mas especificamente, esta herramienta facilita la manera de separar la aplicación lógica y el contenido en la presentación. La mejor descripción esta en una situación donde la aplicación del programador y la plantilla del diseñador juegan diferentes roles, o en la mayoria de los casos no la misma persona. Por ejemplo: Digamos que usted crea una pagina web, es decir, despliega el articulo de un diario. El encabezado del articulo, el rotulo, el autor y el cuerpo son elementos del contenido, estos no contiene información de como quieren ser presentados. Estos son pasados por la aplicación Smarty, donde el diseñador edita la plantilla, y usa una combinación de etiquetas HTML y etiquetas de plantilla para formatear la presentación de estos elementos (HTML, tablas, color de fondo, tamaño de letras, hojas de estilo, etc...). Un día el programador necesita cambiar la manera de recuperar el contenido del articulo(un cambio en la aplicación lógica.). Este cambio no afectara al diseñador de la plantilla, el contenido llegara a la plantilla exactamente igual. De la misma manera, si el diseñador de la plantilla quiere rediseñarla en su totalidad, estos cambios no afectaran la aplicación lógica. Por lo tanto, el programador puede hacer cambios en la aplicación lógica sin que sea necesario restructurar la plantilla. Y el diseñador de la plantilla puede hacer cambios sin que haya rompimiento con la aplicación lógica. One design goal of Smarty is the separation of business logic and presentation logic. This means templates can certainly contain logic under the condition that it is for presentation only. Things such as including other templates, altering table row colors, upper-casing a variable, looping over an array of data and displaying it, etc. are all examples of presentation logic. This does not mean that Smarty forces a separation of business and presentation logic. Smarty has no knowledge of which is which, so placing business logic in the template is your own doing. Also, if you desire no logic in your templates you certainly can do so by boiling the content down to text and variables only. Ahora un pequeño resumen sobre que no hace Smarty. Smarty no intenta separar completamente la lógica de la plantilla. No hay problema entre la lógica y su plantilla bajo la condición que esta lógica sea estrictamente para presentación. Un consejo: mantener la aplicación lógica fuera de la plantilla, y la presentación fuera de la aplicación lógica. Esto tiene como finalidad tener un objeto mas manipulable y escalable para un futuro proximo. Un único aspecto acerca de Smarty es la compilación de la plantilla. De esta manera Smarty lee la plantilla y crea los scripts de PHP. Una vez creados, son executados sobre él. Por consiguiente no existe ningún costo por analizar gramaticalmente cada archivo de template por cada requisición, y cada template puede llevar toda la ventaja del compilador de cache de PHP tal como Zend Accelerator (&url.zend;) o PHP Accelerator (&url.php-accelerator;). Algunas de las características de Smarty: Es extremamente rápido. Es eficiente ya que puede interpretar el trabajo mas sucio. No analiza gramaticalmente desde arriba el template, solo compila una vez. El esta atento para solo recompilar los archivos de plantilla que fueron cambiados. Usted puede crear funciones habituales y modificadores de variables customizados, de modo que el lenguaje de la platilla es altamente extensible. Sintaxis de etiquetas delimitadoras para configuración de la plantilla, así lo puede usar {}, {{}}, <!--{}-->, etc. Los construtoress if/elseif/else/endif son pasados por el interpretador de PHP, así la sintaxis de la expresión {if ...} puede ser compleja o simple de la forma que usted quiera. Permite un anidamiento ilimitado de sections, ifs, etc. Es posible incrustar directamente codigo PHP en los archivos de plantilla, aunque esto puede no ser necesario(no recomendado) dado que la herramienta se puede ajustar. Soporte de caching incrustado Fuentes de Plantilla absoluto Funciones habituales de manipulación de cache Arquitectura de Plugin Instalación Requerimentos Smarty Requiere un servidor web corriendo PHP 4.0.6 o posterior. Instalación Básica Instale los archivos de la libreria de Smarty que estan en el directorio de distribución /libs/. Estos son los archivos PHP que usted NO EDITARA. Estos archivos son toda las aplicaciones comunes y ellos son actualizados cuando usted actualiza a una nueva versión de Smarty. Archivos de la libreria Smarty Smarty utiliza una constante de PHP llamada SMARTY_DIR que es la ruta para el directorio de la biblioteca de Smarty 'libs/'. Basicamente, si su aplicación puede encontrar el archivo Smarty.class.php , usted no necesita definir SMARTY_DIR, Smarty lo encontrará. Por consiguiente si, Smarty.class.php no esta incluido en el path, y no es abastecido por una ruta absoluta para encontrar su aplicación, entonces usted debe definir SMARTY_DIR manualmente. SMARTY_DIR debe incluir una barra de seguimento. Aquí esta un ejemplo de como se crea una instancia de Smarty en sus scripts PHP: Creando una instancia Smarty de Smarty ]]> Intente correr el script de arriba. Si usted obtiene un error diciendo que el archivo Smarty.class.php no fue encontrado, puedes usar una de las siguientes opciones: Reemplazar por la ruta absulta de la libreria del archivo ]]> Adicionar el directorio de la libreria para incluirlo en el include_path de PHP ]]> Defina la constante SMARTY_DIR manualmente ]]> Ahora que la libreria de archivos esta en su sitio, es tiempo de configurar los directorios de Smarty para su aplicación. Smarty require cuatro directorios (por defaul) llamados 'templates/', 'templates_c/', 'configs/' y 'cache/'. Cada uno de estos son para definir las propiedades de las clases de Smarty. $template_dir, $compile_dir, $config_dir, y $cache_dir respectivamente. Es altamente recomendado que usted configure un grupo separado de estos directorios para cada aplicación que utilice de Smarty. Asegurece que usted sabe la ubicación del document root de su servidor web. En nuestro ejemplo, el document root esta en /web/www.example.com/docs/. Los directorios de Smarty solo son accesados por la libreria de Smarty y nunca son accesados directamente por el navegador. Por consiguiente para evitar cualquier preocupación con la seguridad, es recomendado colocar estos directorios fuera del document root. Para nuestro ejemplo de instalación, configuraremos el ambiente de Smarty para una aplicación de libro de visitas. Escojemos una aplicación solo con el proposito de crear un directorio de nombre convencional. Usted puede usar el mismo ambiente para cualquier aplicación, solamente sustituya "guestbook" con el nombre de su aplicación. Nosotros colocaremos nuestros directorios de Smarty dentro de /web/www.example.com/smarty/guestbook/. Usted necesita tener por lo menos un archivo dentro de su document root, y que sea accesado por el navegador. Nosotros llamamos el script de 'index.php', y lo colocamos en un subdirectorio dentro del document root llamado /guestbook/. Nota Técnica: Es conveniente configurar el servidor de forma que "index.php" pueda ser identificado como el índice del directório padre, de esta manera si usted accesa http://www.example.com/guestbook/, el script index.php será ejecutado sin "index.php" ni la URL. En Apache usted puede definir el sitio adicionando "index.php" en el final de su configuración del directorio DirectoryIndex (separando cada uno con espacios.) como en el ejemplo de httpd.conf. DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi Veamos nuestra estructura de archivos hasta hora: Ejemplo de estrutura de archivo Smarty necesitara permisos de escritura (usuarios de windows ingnorar) para $compile_dir y $cache_dir, esto garantiza que el usuario del servidor pueda escribir en ellos. Este es generalmente el usuarios "nobody" y el grupo "nobody". Para usuarios con X sistema operativo, el default es "www" y el grupo "www". Si usted esta usando Apache, puede ver en su archivo httpd.conf (normalmente en "/usr/local/apache/conf/") cual es el usuario y grupo que estan siendo usados. Configurando permisos de archivos Nota Técnica: chmod 770 puede ser una seguridad bastante fuerte, solo le permite al usuario "nobody" y al grupo "nobody" acesso de lectura/escritura a los directorios. Si usted quiere abrir permiso de lectura a cualquiera (en la mayoria de las veces para su propia conveniencia de querer ver estos archivos), usted puede usar el 775 en lugar del 770. Nosotros necesitamos crear el archivo index.tpl, para que Smarty lo pueda cargar. Este estara localizado en su $template_dir. Editando /web/www.example.com/smarty/guestbook/templates/index.tpl Nota Técnica: {* Smarty *} Esto es un comentario en el template. Este no es obligatorio, pero si una buena practica iniciar todos sus archivos de plantilla con estos comentarios. Esto hace facilmente reconocibles a los archivos a pesar la extención del archivo. Por ejemplo, editores de texto pueden reconocer el archivo y habilitar un realce de sintaxis especial. Ahora vamos a editar el index.php. crearemos una instancia de Smarty, daremos valor a las variables del template y mostraremos el archivo index.tpl. En el ambiente de nuestro ejemplo, "/usr/local/lib/php/Smarty" esta dentro de include_path. Asegurese que exista el mismo, o utilice la ruta absoluta. Editando /web/www.example.com/docs/guestbook/index.php template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/'; $smarty->assign('name','Ned'); $smarty->display('index.tpl'); ?> ]]> Nota Técnica: En nuestro ejemplo, estamos configurando rutas absolutas para todos los directorios de Smarty. Si /web/www.example.com/smarty/guestbook/ está dentro de su include_path de PHP, entonces estas declaraciones no son necesarias. Sin embargo, esto es mas eficiente y (por experiencia) tiene menos tendencia a errores en relación a determinar las rutas absolutas. Esto garantiza que Smarty esta recibiendo los archivos del directorio que usted desea. Ahora carge el archivo index.php desde su navegador web. Usted debera ver "Hello, Ned!" Usted a completado la configuracion basica para el Smarty! Expandiendo la configuración Esta es una continuación de la instalación básica, por favor lea esta primero! Una forma un poco mas flexible de configurar el Smarty, expandir las clases e iniciar su ambiente de Smarty. Es, en vez de configurar rutas de directorios repetidamente, asigne esas mismas a variables, etc., nosotros podemos facilitar eso. Vamos a crear un nuevo directorio en "/php/includes/guestbook/" y llamemos al nuevo archivo setup.php . En nuestro ejemplo, "/php/includes" está en nuestro include_path. Verifique que usted también lo definio, o utilice rutas absolutas de los archivos. Editando /php/includes/guestbook/setup.php Smarty(); $this->template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $this->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/'; $this->caching = true; $this->assign('app_name', 'Guest Book'); } } ?> ]]> Ahora vamos a modificar el archivo index.php para usar el setup.php: Editando /web/www.example.com/docs/guestbook/index.php assign('name','Ned'); $smarty->display('index.tpl'); ?> ]]> Ahora usted vera que es completamente simple crear una instancia de Smarty, solo use Smarty_GuestBook, que automáticamente inicializa todo para nuestra aplicación.