Plantillas para webs con PEAR TEMPLATE IT
Si alguna vez queremos crear una web que se pueda personalizar simplemente, por otras personas podemos optar por crear formularios que adapten nuestro diseño o dar mas libertad dejando que carguen sus propios diseños. Pero esta es la parte dura donde nos descentramos. Si se quiere hacer una web personalizable por terceras personas, o damos documentación especifica y extensa sobre nuestras funciones, preparando a los que quieran personalizarla, o utilizamos sistemas existentes que sienten unas bases que nos faciliten la tarea.
Uno de los mas famosos que he visto es Smarty, el cual es un administrador de plantillas de manera que, un código puente mezcla una plantilla dada con los datos generados en el Script, mostrando un formato especifico según la plantilla que se use.
Smarty debe su fama a su forma de utilización, siendo muy sencillo para programadores pero algo mas complejo para diseñadores sin conocimientos de programación. El modo de generar las plantillas es utilizar textos con corchetes que contienen variables o etiquetas muy parecidas al html que actúan como funciones especificas marcadas en el código puente. Algo que puede llegar a ser excesivamente complejo a la hora de crear un proyecto sencillo. Por ese motivo me decidí a investigar la función IT de PEAR.
PEAR es un conjunto de funciones creadas y estandarizadas para correr dentro de un servidor php. Lo malo es que casi ningún servidor las tiene integradas y esto hace que no se puedan usar nativamente, pero algunas de estas como IT, no necesita acceso interno al servidor. Solo hay que descargarla desde el repositorio y empezar a usarla.
IT tiene la ventaja frente a Smarty de utilizar 2 tipos de instrucciones dentro de las plantillas, siendo ambas instrucciones perfectamente estandar a la hora de ejecutar las plantillas sin procesar, de manera que se podría visionar la plantilla sin errores web en un navegador sin mas. Este recorte de funcionalidad hace que sea muchísimo mas fácil para un diseñador web que nunca ha tocado el PHP crear plantillas adaptadas al sistema, ya que los procesos de cada dato a exponer se generan en el script y no en la plantilla.
IT utiliza los corchetes para determinar donde sustituirá una variable, como por ejemplo {DATO}, y los "comentarios web" para crear bloques de código con nombre especifico. Por ejemplo un bloque que se llame "tabla" se pondría como <!-- BEGIN tabla --> <!-- END tabla --> Si ponemos otro tipo de comentario no interferirá en la generación del código final.
Dado que la librería IT de PEAR presenta un uso mas simple a la hora de facilitar su uso al usuario final será la que trataré a partir de ahora.
Para utilizar esta librería he generado una función que me parece básica. Se trata de la función que determina los bloques y variables continentes en una hoja de plantilla dada y los introduce en un array que se puede recorrer facilmente.
-
function revisar($dir){
-
$bloques = '!<\!-- END (.+) -->!U';
-
$datos = '!{(.+)}!U';
-
return $salida;
-
}
Para utilizar esta funcion solo tenemos que poner la ruta del archivo donde se encuentra la plantilla y dará como resultado el array.
Ejemplo:
-
$datos = revisar($dir);
Una vez que sabemos y tenemos determinado si la plantilla introducida (que no tiene porque tener todos los elementos que nuestro código puente) es correcta, comenzamos a crear un ejemplo practico de como se utilizaría.
Del archivo descargado nos interesan 3 archivos que serán los que usaremos, estos tres archivos seran los 3 archivos PHP: IT.php ITX.php y IT_Error.php.
El primer ejemplo lo realizaremos con IT.php. Para utilizar IT generaremos un objeto a partir de new HTML_Template_IT() el cual tendrá la dirección donde están las distintas plantillas usar. Una vez tenemos el objeto usaremos la función loadTemplatefile() para determinar cual de los archivos plantilla seleccionaremos para cruzarlo con nuestro codigo.
Declarados estos elementos ya podríamos empezar a situar cada dato en su sitio. para realizar esto, asignaremos primero el bloque en el que se encuentra la variable que tenemos que modificar a partir de la función setCurrentBlock() y declararemos que función se asigna a que nombre a partir de la función setVariable(). Por ejemplo, si quisieramos asignar que las etiquetas {NOMBRE} dentro del bloque previamente seleccionado se cambiaran por las variables $nombre_de_usuario tendriamos que poner $variable_de_objeto_IT->setVariable('NOMBRE', $nombre_de_usuario);. Una vez modificado todo el codigo ejecutamos show() para que se muestre el código generado
Un ejemplo de para que nos valen los bloques es para construir correctamente tablas personalizadas en html con poco esfuerzo.
Para que el siguiente ejemplo funcione el archivo IT.php tiene que estar en la misma carpeta del servidor que el siguiente, el cual debe tener como nombre plantilla_uno.tpl.htm.
Una vez escrita la plantilla ahora tenemos que crear otro archivo. Esta vez este será el que contiene el código puente y nuestro propio código, el cual será un array. Para que funcione debemos crear un archivo php y escribir lo siguiente:
-
<?php
-
//creamos el codigo a representar
-
);
-
-
//creamos el codigo puente
-
require_once './IT.php'; //insertamos la libreria
-
$it = new HTML_Template_IT('./'); //declaramos el objeto
-
$it->loadTemplatefile('plantilla_uno.tpl.htm', true, true); //seleccionamos la plantilla
-
foreach ($data as $name) { //recorremos el array
-
$it->setCurrentBlock('tabla'); //buscamos el bloque
-
$it->setVariable('COLOR', $name[0]); //declaramos la variable COLOR
-
$it->setVariable('DESCRIPCION', $name[1]); //declaramos la variable DESCRIPCION
-
$it->parseCurrentBlock(); //generamos la parte del bloque analizado
-
}
-
$it->show(); //mostramos el resultado
-
?>
Una vez escrito esto entramos en la ultima pagina PHP. Si nos fijamos en el código, tiene la misma estructura del bloque "tabla" de la parte de la plantilla debido a que esta estructura se repite tantas veces como se repite el foreach de nuestro ejemplo.
Si el nombre de bloque fallase (podéis comprobar cambiandolo), la pagina completa se repetirá. También a partir de este ejemplo base podéis comprobar que si cambiáis la plantilla por un código PHP que genere el código de la misma dinámicamente también funciona.
De todas formas si no quisiéramos tomar el codigo desde una archivo y lo quisieramos tomar directamente desde nuestro mismo codigo solo tenemos que usar setTemplate() de la misma manera que loadTemplatefile() solo que cambiando la dirección del archivo por el contenido de este. Para mas información de esta función, setTemplate.
El segundo archivo de la librería IT, ITX.php, incluye todas las funciones de IT.php, a demás incluir el archivo IT_Errors.php el cual permite un mejor tratamiento de los errores a partir de PEAR. La función básica que trae es la extensión de la utilización de los bloques, de manera que permite hacer que un dato sea sustituido por un bloque completo tomado desde un archivo externo, o eliminado a demás de incluir funciones de "test" para determinar si existen un nombre de bloque, una variable, listarlas.... Una extensión completa a la utilización básica de la librería IT.
Comparte este artículo
Licencia de los contenidos
© Todos los derechos reservados