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:Ahora podemos mostrar el contenido del HTML ya modificado:<?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', ?>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$plantilla->mostrar(); ?>Podemos observar que hay una función llamada Contenido y otra rellenaDiv, ésta usa una tercera llamada pasarAplantilla, pueden ser las siguientes:<?php$app->html->Contenido( array(‘division_hab_reserva' => $app->html->rellenaDiv(‘index.html', array(‘IDIOMA'=>$app->idioma)), ‘division_contenido' => "",‘division_extendido' => "")); ?>Por último la clase plantilla en sí mismo, simple,sencilla:<?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; } ?>Y hasta aquí un pequeño ejemplo de la clase plantilla, la más simple del reino!<?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); } } ?>
Seguir las respuestas con el canal RSS 2.0 para ello. Ir al final para comentar. "Pinging" no permitido.
#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 …
pues falta que metas la clase, require_once('clase_plantilla.php');