What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
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.
Example 2.1. Archivos de la libreria Smarty
Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl /internals/*.php (all of them) /plugins/*.php (all of them)
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:
Example 2.2. Creando una instancia Smarty de Smarty
<?php require('Smarty.class.php'); $smarty = new 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:
Example 2.3. Reemplazar por la ruta absulta de la libreria del archivo
<?php require('/usr/local/lib/php/Smarty/Smarty.class.php'); $smarty = new Smarty; ?>
Example 2.4. Adicionar el directorio de la libreria para incluirlo en el include_path de PHP
<?php // Edite su archivo php.ini, y adicione el directorio de la libreria de Smarty // include_path y reinicie su servidor web. // Entonces lo siguiente debe funcionar: require('Smarty.class.php'); $smarty = new Smarty; ?>
Example 2.5. Defina la constante SMARTY_DIR manualmente
<?php define('SMARTY_DIR', '/usr/local/lib/php/Smarty/'); require(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty; ?>
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/
.
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:
Example 2.6. Ejemplo de estrutura de archivo
/usr/local/lib/php/Smarty/Smarty.class.php /usr/local/lib/php/Smarty/Smarty_Compiler.class.php /usr/local/lib/php/Smarty/Config_File.class.php /usr/local/lib/php/Smarty/debug.tpl /usr/local/lib/php/Smarty/internals/*.php /usr/local/lib/php/Smarty/plugins/*.php /web/www.example.com/smarty/guestbook/templates/ /web/www.example.com/smarty/guestbook/templates_c/ /web/www.example.com/smarty/guestbook/configs/ /web/www.example.com/smarty/guestbook/cache/ /web/www.example.com/docs/guestbook/index.php
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.
Example 2.7. Configurando permisos de archivos
chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/ chmod 770 /web/www.example.com/smarty/guestbook/templates_c/ chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/ chmod 770 /web/www.example.com/smarty/guestbook/cache/
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.
Example 2.8. Editando /web/www.example.com/smarty/guestbook/templates/index.tpl
{* Smarty *} Hello, {$name}!
{* 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.
Example 2.9. Editando /web/www.example.com/docs/guestbook/index.php
<?php // load Smarty library require('Smarty.class.php'); $smarty = new Smarty; $smarty->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'); ?>
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!