Primero que nada, esta parte está lejos de ser un tutorial de Smarty, ya que sólo utilizaremos algunas cosas, adaptándolo a nuestro ejemplo (un pequeño sistema de noticias), los que quieran conocer más a fondo esta herramienta, en mi opinión, no hay nada mejor que el manual de la página oficial.

Smarty, como ya había mencionado en la introducción, es un motor de plantillas para PHP, esta herramienta facilita la manera de separar la lógica aplicación, de la presentación de la misma.

Para empezar primero hay que descargar el código fuente de Smarty, la única carpeta que nos interesa del mismo, es la carpeta libs. La estructura que tendrá nuestro ejemplo (denominaremos aplicación al ejemplo que estamos haciendo) es la siguiente:

  • /var/www/
    • html/bc-news: Lugar visible para el mundo exterior, donde ubicaremos los archivos de la aplicación (excepto las plantillas).
      • includes: Funciones y demás utilerías que darán soporte a la aplicación.
      • images: Imágenes de la aplicación.
      • js: Ubicación de los posibles scripts de cliente.
      • css: Hojas de estilo para la aplicación.
    • smarty: Es el directorio libs del código de Smarty.
      • plantillas: Ubicaremos las plantillas de la aplicación.
      • plantillas_c: Lugar donde se almacenarán las plantillas compiladas por Smarty. El usuario bajo el que se ejecuta el servidor web, necesita permisos de escritura sobre este directorio.

Una vez con nuestra estructura definida, pasamos a establecer el archivo de configuración y algunas inicializaciones (esta es mi forma de trabajar, no necesariamente tienen que hacerlo así), definimos el archivo config.php en el directorio bc-news:

<?php
	# Archivo config.php
	# ------------------
	
	# Directorio donde está ubicado Smarty
	define('SMARTY_PATH', '/var/www/smarty/');

	# Define la ruta fí­sica del sitio
	define("APP_PHISICAL_PATH",$_SERVER['DOCUMENT_ROOT'] . "/");
	# Define la ruta base del sitio
	define("BASE_PATH", APP_PHISICAL_PATH . "bc-news/");
	# Lugar donde se ubican las funciones, clases, etc.
	define("INCLUDE_PATH", BASE_PATH . "includes/");
	# Define el URL base
	define("BASE_URL","http://" . $HTTP_SERVER_VARS['HTTP_HOST'] . "/bc-news/");
	
	/* Para los estilos e imágenes */
	define("IMAGES_URL",BASE_URL . "images/");
	define("STYLES_URL",BASE_URL . "css/");
	define("SCRIPTS_URL",BASE_URL . "js/");
	
	# El directorio donde se ubican las traducciones
	define("LOCALE", INCLUDE_PATH . "locale/");
	
	# El idioma por defecto bajo el cual se deben llenar obligatoriamente todos los datos
	define("DEFAULT_LANG", "es");
	
	# Parámetros de la base de datos
	$db_params['db_host']="localhost";
	$db_params['db_name']="bc-news";
	$db_params['db_user']="bc-news";
	$db_params['db_pass']="bc";
?>

Creamos el archivo smarty-instance.php dentro del directorio includes, el cual tiene el objetivo de crear una instancia de Smarty y hacer algunas configuraciones del mismo:

<?php
	# Instancia un objeto de la clase Smarty y define sus atributos
	
	# Carga la clase
	include_once (SMARTY_PATH . 'Smarty.class.php'); 
	
	# Instancia un nuevo objeto de la clase
	$smarty = new Smarty;
	
	# Define las rutas de trabajo
	$smarty->template_dir 	= SMARTY_PATH . "plantillas";
	$smarty->compile_dir 	= SMARTY_PATH . "plantillas_c"; # Necesita permisos de escritura
	# Definir un directorio para hacer cache
	#$smarty->cache_dir 		= SMARTY_PATH . "cache"; # Necesita permisos de escritura
?>

Finalmente, creamos el archivo init.php que se encargará de incluir el archivo config.php y todos los archivos del directorio includes, por el momento sólo contiene estas líneas:

<?
	include_once('config.php');
	include_once(INCLUDE_PATH . 'smarty-instance.php');
?>

En la siguiente entrega, tocaremos un poco de Gettext e implementaremos un plugin para Smarty que se encargue de invocar a las funciones de php-gettext .