Funciones interesantes »
« Paradigma: una clase o muchas clases

Clase plantilla simple

Escrito el 29/December/2006 por juan_belon

Es una de las clases más simples que he podido crear para gestionar contenido
usando plantillas.
Un ejemplo de cómo se usa es la mejor explicación que se me ocurre:

Creamos un fichero.html con el contenido:

< html> < head> < title>#TITULO#< /title> < /head> < body> < p align="center">#CONTENIDO#< /p> < /body> < /html>A continuación cambiaremos las etiquetas #TITULO# y #CONTENIDO# en php,
cargando craendo la clase y leyendo el fichero primero ,para después hacer
la sustitución:
<?phprequire_once(‘clase_plantilla.php'); $plantilla = new clase_plantilla(); $plantilla->cargar(‘fichero.html'); //suponiendo que está en la misma ruta que el script $plantilla->reemplazar(‘TITULO',‘Mi página web'); $plantilla->reemplazar(‘CONTENIDO', ?>
Ahora podemos mostrar el contenido del HTML ya modificado:
<?php$plantilla->mostrar(); ?>
Si queremos algo más profesional crearemos una función en una clase extra o heredada de ésta que haga que se sustituyan matrices completas de contenidos. Ésta clase HTML podemos insertarla en una clase principal o aplicación accesible desde el resto de clases que guardemos ahí.
<?php$app->html->Contenido( array(‘division_hab_reserva' => $app->html->rellenaDiv(‘index.html', array(‘IDIOMA'=>$app->idioma)), ‘division_contenido' => "",‘division_extendido' => "")); ?>
Podemos observar que hay una función llamada Contenido y otra rellenaDiv, ésta usa una tercera llamada pasarAplantilla, pueden ser las siguientes:
<?php/** * Usando la clase plantilla pasada reemplaza los valores de la matriz del argumento * * @param array $array * @param clase_plantilla $plantilla * @return bool */ function pasarAplantilla($array,&$plantilla) { if (!is_array($array)) return false; foreach ($array as $llave => $valor) { $plantilla->reemplazar($llave,$valor); } return true; } /** * Escribe el contenido en html por la salida estandar * usando el gestor de plantillas * * @param array $contenidos * @param str $parametros_body */ function Contenido($contenidos, $parametros_body=‘bgcolor="#D9C8B1″ topmargin="0″‘) { $this->plantilla->cargar(‘body_basico.html'); $this->pasarAplantilla($contenidos,$this->plantilla); $this->plantilla->reemplazar(‘parametros_body', $parametros_body); $this->plantilla->reemplazar(‘imagen_cabecera', $this->lista_imagenes_cabecera(-2)); //aleatorio $this->plantilla->reemplazar(‘lista_idiomas', $this->listaIdiomasHTML()); $pie = new clase_plantilla($this); $pie -> cargar(‘pie.html'); $this->plantilla->reemplazar(‘pie_de_pagina', $pie->contenido); unset($pie); $this->plantilla->mostrar(); } /** * Reemplaza las constantes de la plantilla por los * contenidos y devuelve el resultado en HTML * * @param str $fichero * @param array $reemplazos * @return str : html */ function rellenaDiv($fichero,$reemplazos=array()){ $p = new clase_plantilla($this); $p->cargar($fichero); $this->pasarAplantilla($reemplazos,$p); return $p->contenido; } ?>
Por último la clase plantilla en sí mismo, simple,sencilla:
<?php class clase_plantilla { /** * CLASE BASE * * @var clase_base */ var $padre; /** * BASE DE DATOS * * @var clase_bd */ var $bd; /** * Contenido de la pagina actual * * @var str */ var $contenido; /** * Constructor * * @param aplicacion $_padre * @return clase_plantilla */ function clase_plantilla(&$_padre){ $this->padre = &$_padre; $this->bd    = &$_padre->bd; } /** * Carga un fichero de plantilla y lo almacena en $this->contenido y devuelve el resultado de la operacion * * @param str $fichero * @return bool */ function cargar($fichero){ $this->contenido ""; if (!file_exists(DIR_PLANTILLAS.$fichero)) return false; $this->contenido file_get_contents(DIR_PLANTILLAS.$fichero); return !empty($this->contenido); } /** * Reemplaza las etiquetas de la plantilla dadas por $var con $contenido en $this->contenido: la plantilla HTML * * @param str $var * @param str $contenido */ function reemplazar($var$contenido) { $this->contenido str_replace("#$var#"$contenido$this->contenido); } /** * Reemplaza el contenido por texto y lo muestra, borra de memoria la plantilla HTML de la clase $this->contenido * */ function mostrar() { eval("?>".$this->contenido."< ?"); unset($this->contenido); } } ?>
Y hasta aquí un pequeño ejemplo de la clase plantilla, la más simple del reino!

Seguir las respuestas con el canal RSS 2.0 para ello. Ir al final para comentar. "Pinging" no permitido.


2 Conversaciones to “Clase plantilla simple”

  1. Carlos on

    #TITULO# #CONTENIDO# A continuación cambiaremos las etiquetas #TITULO# y #CONTENIDO# en php, cargando craendo la clase y leyendo el fichero primero ,para después hacer la sustitución:Warning: main(clase_plantilla.php) [function.main]: failed to open stream: No such file or directory in F:\Archivos de programa\Apache Group\Apache2\htdocs\prueba.php on line 14Fatal error: main() [function.require]: Failed opening required ‘clase_plantilla.php' (include_path='.;C:\php5\pear') in F:\Archivos de programa\Apache Group\Apache2\htdocs\prueba.php on line 14Este es el error tan horrible que sale, imagino que es por no tener ni idea …


  2. juan_belon on

    pues falta que metas la clase, require_once('clase_plantilla.php');


Para decir algo pulsa aquí

Debes de acceder para poder comentar.