Interprete de plantillas sencillo y rápido con PHP
Categorias: PHP
A medida que uno va creando aplicaciones PHP se va dando cuenta de la conveniencia de diferenciar la lógica del programa del aspecto visual del mismo, es decir, mantener separados el código PHP del programa del código XHTML/HTML que define su aspecto visual.
Hay varios formas y niveles de separar el código PHP del XHTML, pero la más conveniente es aquella que permite la separación completa, es decir, aquella en la que el diseño es totalmente independiente del código de la aplicación. La forma de lograr esto es mediante el uso de lo que, en ingles, se suele denominar “Template engine”, es decir, “Interprete de plantilla”. Gracias a estos “Templante engines”, la lógica de la aplicación se define en el código PHP, creada y mantenida por los programadores, mientras que el aspecto visual se define en plantillas, creadas y mantenidas por un diseñador, alguien que no necesariamente sabe programar.
En el mundo de PHP, el “Template engine” más conocido, más potente y el que ofrece mayor flexibilidad es Smarty. Smarty permite la separación completa entre el código de la aplicación y su aspecto, definido mediante plantillas que permiten el uso de etiquetas y funciones especiales asignados desde el código PHP.
Smarty es genial, pero en muchos casos, resulta excesivamente complejo y lento. Recientemente, hemos tenido que crear una aplicación para el envio de boletines electrónicos mediante email en donde cada email debe ser personalizado con los datos del destinatario. Al principio, pensamos utilizar Smarty para personalizar los email a partir de una plantilla previamente definida, ya que su capacidad de precompilar las plantillas permitiría disminuir el tiempo necesario para interpretarlas. Al final no conseguimos que funcionara como queríamos y terminamos creando nuestro propio “Interprete de plantillas” que te presentamos a conitnuación:
Nuestro interprete de plantillas
El código superior es el código completo de nuestro “Interprete de plantillas”, guardalo en un archivo llamado “plantilla.class.php”.
Ejemplo con una sola variable
La utilización más simple de nuestro interprete de plantillas es aquel en el que asignas una sola variable a la plantilla, lo puedes ver a continuación:
Guarda este código en archivo llamado “ejemplo1.php” ubicado en el mismo directorio que “plantilla.class.php” y ejecutalo. Su resultado debería ser algo así:
Ejemplo con array
Otra posibilidad es asignar a la plantilla un array con valores en vez de una simple variable, un ejemplo de ello lo tienes a continuación:
Si guardas y ejecutas este código de la misma forma que con el ejemplo anterior, el resultado sería:
Ejemplo con un bucle
Supongamos que queremos hacer un listado de los estudiantes de una escuela, en este ejemplo te muestro como debería hacerse:
Si guardas y ejecutas este código de la misma forma que con el ejemplo anterior, el resultado sería:
Ejemplo con inclusión de código PHP en plantilla
A veces es conveniente incluir en la plantilla algo de código PHP, en este ejemplo te mostramos como hacerlo:
Si guardas y ejecutas este código de la misma forma que con en los ejemplos anteriores, el resultado será el mismo que en el primer ejemplo:
Ejemplo con plantillas reales
Para terminar, un ejemplo en el cual el código HTML que vamos a interpretar está guardado en un archivo. Esta es la forma de almacenaminiento más habitual de las plantillas, aunque también se puede almacernar en una base de datos, etc.
Empezemos, para ponerlo más interesante vamos a usar 3 plantillas: la plantilla en sí, su cabecera y su pie de página. Llamemos a la primera “plantilla.tpl”, y “cabera.tpl” y “pie.tpl” a las otras dos.
Guardar el siguiente código en el archivo “cabecera.tpl”:
El siguiente código guardalos como “plantilla.tpl”:
Y, por último, guarda este código en “pie.tpl”:
Ahora, guarda el siguiente código en un archivo llamado “ejemplo_con_archivos.php”:
Como verás es prácticamente igual a nuestro primer ejemplo, pero hay dos diferencias:
- La primera diferencia es que esta vez, como la plantilla está almacenado en un archivo no es necesario definir la variable $codigo que hasta ahora habíamos venido utilizando.
- La segunda diferencia está en la forma que llamamos a la función de nuestro interprete que se encarga de interpretar las plantillas, $this->parse(). Esta vez, no le pasamos el código de la plantilla sino la ubicación del archivo y además, le pasamos otro argumentos con valor “true” que indica que le estamos pasando la ubicacion del archivo y no su contenido.
Además, como la plantilla “plantilla.tpl” insertaba otroas dos plantillas, el resultado final de la ejecución de este código será:
Tagging: php, plantillas, smarty, template engine
-
10 comentarios | Escriba su comentario
1. Adolfo | 13/12/2005 20:12
Genera el siguiente error:
Parse error: parse error, expecting `T_STRING’ or `T_VARIABLE’ or `T_NUM_STRING’ in c:\archivos de programa\easyphp1-8\www\template5\plantilla.class.php on line 43
2. webmaster | 13/12/2005 20:26
Hola Adolfo,
Que raro. ¿Que contiene la línea 43?
Por cierto, te he enviado un email al email que has dado al escribir tu comentario.
Un saludo
3. Adolfo | 13/12/2005 20:48
Perdona, era la linea 47
4. webmaster | 13/12/2005 21:05
Vaya, al publicar el código en la bitácora este ha cambiado ligeramente y por eso te da error.
Te voy a enviar por email el árticulo completo y así tendrás el código correcto.
Y habrá que corregir el artículo.
Gracias Adolfo.
Un saludo,
5. webmaster | 13/12/2005 21:09
Adolfo, te acabo de enviar el artículo completo al email que nos has dado.
Mientras solucionamos el tema, si alguién más esta interesado en que le enviemos el artículo, por favor, que añada un comentario.
Un saludo,
6. Adolfo | 14/12/2005 09:36
Gracias por tu interés, pero no me han llegado los correos, prueba con esta otra dirección.
Un saludo
7. webmaster | 14/12/2005 11:55
Hola Adolfo,
Ahora mismo te envio otro correo. De todas formas, con los cambios que hemos hecho está noche, creo que el código de la página también es correcto.
Un saludo
8. Juan | 14/03/2006 21:22
Muy interesante, lo voy a probar, muchas gracias!
9. Paulina Velasco | 12/06/2006 19:49
Hola webmaster, pues a mi también me indica errores, a pesar de haberle hecho algunas modificaciones, espero si tienes tiempo que me envies a mi tambien el código a mi correo. Bye y gracias
10. webmaster | 22/06/2006 01:18
Hola Paulina,
Lo acabo de probar y funciona perfectamente, el cógido que actualmente mostramos es correcto.
¿que error te da?
Escribir comentario
Los comentarios son propiedad y responsabilidad de sus autores. Los comentarios fuera de tópico y el spam serán removidos. Los e-mails se mantienen privados y no se publican ni utilizan para otros efectos que los de validación. Aparte de eso, sean bienvenidos a comentar.
Trackback este artículo | Suscibase a los comentarios con RSS Feed