Manual PHP. PHPLIB (II)

Actualizado el 10/04/2007 < > 0 Comentarios

Resúmen: Uso de la librería PHPLIB para la implementación de plantillas o templates.

Meneame Bitacoras

PHPLIB. Plantillas

Ya se ha comentado que uno de los principales problemas a la hora de programar con PHP, o cualquier otro lenguajes que mezcle HTML y el código, es que el código final de las páginas tiene mezclado los datos a presentar y el código.

Este mezcla impide además un correcto trabajo entre los desarrolladores de código y los creadores de páginas HTML y diseñadores gráficos. Para resolver este problema lo mejor es intentar independizar totalmente el código PHP y el código HTML. Este objetivo es bastante lioso de lograr a menos que se ataque el problema de una forma general y se sea muy estricto a la hora de desarrollar las páginas.

Los beneficios logrados por esta separación son muy grandes incluyendo por ejemplo el cambio de temas según el tipo de usuario que acceda al servidor de web, facilitar la traducción de webs sin tocar para nada el código facilitando así la internacionalización del código etc.

Dentro de la librería PHPLIB nos encontramos con una clase que nos ayuda con este objetivo: la clase Template.

Para ver la potencia del uso de plantillas vamos a planter un ejemplo de unsa sencilla página que debe de controlar el acceso a un web y según el usuario que entre, se debe de presentar el web en un idioma u otro. La aplicación lo único que hace es mostrar una serie de datos númericos sobre cotización en bolsa en euros, por lo que esta información es idéntica para todos los idiomas.

Para ello podríamos utilizar os mecanismos de autenticación de la propia PHPLIB. Podríamos crear una nueva tabla en la base de datos asociando identificador de usuario e idioma y tendríamos que preparar los diferentes webs.

Supongamos que inicialmente tenemos dos idiomas: español e inglés. Podemos crear dos directorios, uno con las plantillas en español y el otro con las plantillas en inglés. El código podría empezar de la forma:

page_open(array("sess" => "Example_Session", "auth" =>
"Example_Auth", "perm" => "Example_Perm", "user" =>
"Example_User"));

// Template no es del núcleo de PHPLIB por lo que hay que
// incluir esta clase de forma explícita.  

include("template.inc");
$plantillas = "/home/acs/public_html/plantillas";
$plantillasEspañol = $plantillas."/español";
$plantillasIngles= $plantillas."/ingles";

// Ya sabemos que usuario es $auth[uname
// La función miraIdioma accedería a la base de datos
// para ver que idioma le corresponde a un usuario.
$idioma=miraIdioma ($auth[uname]);
if ($idioma=="español") $t=new Template($plantillasEspañol);
elseif ($idioma=="ingles") $t=new Template($plantillasIngles);
else {echo "Error en la selección de idioma.";exit;}

// Tenemos dos plantillas: una para la cabecera y otra
// para el cuerpo

$t->set_file(array( "cabecera" => "cabecera.ihtml",
"cuerpo"  => "cuerpo.ihtml"));

// Suponemos que existe una función que nos devuelve
// los valores a presentar.

$valores = obtenValores();  $fecha = date("d/m/a");

// Cada plantilla puede contener un número de variables cuyo
// valor se controla desde el código a través de Template

$t->set_var(array("Fecha"   => $fecha,
"Valores" => $valores));  $t->parse("OUT",
array("cabecera", "cuerpo"));   

/* imprimimos OUT */

$t->p("OUT");

Todas las plantillas asociadas a un objeto Template han de encontrarse en un directorio. En nuesto ejemplo según el idioma se cogen del directorio en inglés o del español. Una vez asignado el directorio a través de la función “set_file” asociamos plantillas a nombres. De esta forma en nuestro programa utilizaremos los nombres aquí indicados para referirnos a la plantilla a utilizar. En este sencillo ejemplo sólo hay dos plantillas “cabecera.ihtml” y “cuerpo.ihtml”.

Aparte de definir las plantillas con las que vamos a trabajar hay que definir las variables que hay que sustituir en dichas plantillas. Cualquier ocurrencia de una variable dentro de una plantilla es sustituido por el valor que le asociamos a través de “set_var”. En nuestro caso la varible “{Fecha}” se sutituye por “$fecha” y “{Valores}” por $valores.

Por ejemplo, el contenido de “cabecera.ihtml” podría ser:

<html><head><title>Valores de cotización<title>
<head><body>Fecha de los valores: {Fecha}

El valor de “{Fecha}” será sustituido de forma automática cuando ejecutemos la función de sustitución de valores “parse”. El resultado lo almacenamos en la variable “OUT” que imprimimos finalmente con la función “p()”.

Las plantillas que se incluyen en PHPLIB tienen una funcionalidad más amplia y sugerimos al lector una lectura de la documentación de PHPLIB para ver todas sus posibilidades.

Meneame Bitacoras

Publicado el 10/04/2007, última actualización 10/04/2007.

Autor: Alvaro del Castillo

URL: No especificado

(Subir al texto)

Añadir Comentario

* Campos obligatorios