Comunidad de diseño web y desarrollo en internet online

Creación y uso de plantillas o templates en PHP

En este pequeño tutorial vamos a tratar sobre como trabajar plantillas (templates) con php, vamos a decir unas pocas pero grandes ventajas de trabajar de esta manera:

  • Separamos el XHTML o HTML del código php, es decir, nuestra plantilla no tendrá codigo php, asi que a la hora de diseñar solo nos preocuparemos por eso, de diseñar únicamente.
  • Mejor organización de los archivos.

Nota: la plantilla no contendrá código php, cualquier código php que contenga este simplemente será ignorado.

Son dos pero muy buenas, es decir, el diseñador que se encargue de diseñar y el programador que se encargue de programar.

Explicación

Ahora vamos a ver como lograr esto, simplemente identificaremos la zona que php editara con un identificador encerrado por llaves "{}", para verlo más claro, empecemos con hacer nuestra plantilla, como dije anteriormente solo será código XHTML o HTML

<html>
<head>
        <title>Esto es una prueba de uso de plantillas</title>
</head>
<body>
        <p>Mi {variable} con plantilla y php </p>
</body>
</html>

Como vemos simplemente código HTML, php se encargará de parsear variable que es lo que esta encerrado entre llaves, para esto utilizaremos la clase Plantilla hecha por Dano, basándose en el sistema de plantillas de phpBB, solo necesitamos pasarle el nombre de nuestra plantilla, las lista de variables que vayamos a parsear e invocar el metodo(o función como lo entiendas mejor) que se encargará de hacer el parseo, este es código de dicha clase.

<?
class plantilla{
        function plantilla($template_file){
                $this->tpl_file = 'plantillas/' . $template_file . '.tpl';
        }
        
        function asigna_variables($vars){
                $this->vars= (empty($this->vars)) ? $vars : $this->vars . $vars;
        }
        
        function muestra(){
                if (!($this->fd = @fopen($this->tpl_file, 'r'))) {
                        sostenedor_error('error al abrir la plantilla ' . $this->tpl_file);
                } else{
                        $this->template_file = fread($this->fd, filesize($this->tpl_file));
                        fclose($this->fd);
                        $this->mihtml = $this->template_file;
                        $this->mihtml = str_replace ("'", "\'", $this->mihtml);
                        $this->mihtml = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "' . $\\1 . '", $this->mihtml);
                        reset ($this->vars);
                        while (list($key, $val) = each($this->vars)) {
                                $$key = $val;
                        }
                        eval("\$this->mihtml = '$this->mihtml';");
                        reset ($this->vars);
                        while (list($key, $val) = each($this->vars)) {
                                unset($$key);
                        }
                        $this->mihtml=str_replace ("\'", "'", $this->mihtml);
                        echo $this->mihtml;
                }
        }
}
?>

El constructor plantilla tiene un parametro, su valor será el nombre del archivo de la plantilla (sin la extensión) que vayamos a parsear, es decir, si guardamos la plantilla con el nombre miplantilla.tpl solo pondremos como parametro miplantilla, teniendo el nombre del archivo se lo asignamos a una variable y le concatenamos la extensión que usemos para nuestras plantillas (las extensiones de las plantillas pueden ser: .dwt, .tpl, .html, etc) la más usada y común es .tpl , aunque dreamweaver las guarda por defecto como .dwt

Ahora el primer método (o función como lo entiendas mejor) de nuestra clase será asigna_variables, que se encargara de recibir los nombres de las variables que vayamos a parsear, en caso de este ejemplo sera variable (ver código html de la plantilla).

El siguiente método será muestra es nuestro parseador como tal, es decir, este identificará las variables obtenidas en el anterior metodo que hayan en la plantilla y lo sustituira por el valor que nosotros queramos.

Veamos con un simple ejemplo como podemos usarla, antes de esto vamos a explicar como deben organizados nuestros archivos, primero creamos una carpeta llamada plantillas que contendrá todos los archivos de las plantillas diseñadas por nosotros, al mismo nivel de la carpeta pondremos el archivo (clase_plantilla) con el script de la clase plantilla y los scripts php que la vayan a usar, una imagen de la estructura seria algo asi:

Dentro de la carperta plantillas tendriamos esto:

Ahora dicho esto veamos como utilizar la clase, creamos nuestro script php llamado holaMundo.php , que contendrá solo esto:

<?
include("clase_plantilla.php");

//al Pasar como parametro holaMundo, asumimos que en la carpeta plantillas existe un archivo de nombre holaMundo.tpl
$Contenido=new Plantilla("holaMundo");
$Contenido->asigna_variables(array(
        "variable" => "holaMundo "
));

//$ContenidoString contiene nuestra plantilla, ya con las variables asignadas, fácil no?
$ContenidoString = $Contenido->muestra();
echo $ContenidoString;
?>

Incluimos el código de nuestra clase(vease la primera línea del código), luego creamos un objeto Plantilla solo pasándole el nombre del archivo de nuestra plantilla (en nuestro ejemplo holaMundo, recuerdo sin la extensión .tpl).

Luego invocamos el metodo de asigna_variables de nuestro objeto y le pasaremos la lista de variables que tiene nuestra plantilla, para el caso del ejemplo solo es variable y le asignamos su valor.

Despues parseamos nuestra plantilla recogiendo el resultado en una variable($ContenidoString) que obtenemos al invocar el método muestra de nuestro objeto ($Contenido).

Por último imprimimos nuestra variable($ContenidoString).

Ahora hecho todo esto para ver el resultado solo abriremos desde el browser el archivo holaMundo.php.

Cabe destacar que la clase maneja los errores de plantillas inexistentes, para hacer uso de esto solo necesitamos crear una plantilla con el nombre error.tpl y en tal caso de que se trate de parsear una plantilla que no exista, nos muestre una pagina de error, por ejemplo algo como esta:

<html>
<head>
        <title>Esto es una prueba de uso de plantillas</title>
</head>
<body>
        <p>Mi {variable} con plantilla y php </p>
</body>
</html>

El mensaje será el que pasemos por parámetro a la función sostenedor_error (Ver código de la clase Plantilla).

Despedida

Bueno es todos amigos, un especial agradecimiento al amigo Dano por compartir su clase con nosostros.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Descargar Archivo

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate