. */ // // Esta clase procesará una página sustituyendo // las marcas {} por el contenido que proceda. // // El constructor recibe el nombre del archivo que // actúa como plantilla de distribución del contenido // y una referencia al objeto cuyos métodos deberán // aportar los contenidos. // class Distribucion { // Variable para conservar la plantilla private $plantilla; // Matriz que contendrá los nombres de elementos private $elementos; // Referencia al objeto cuyos métodos serán // invocados para aportar el contenido private $objeto; // Constructor de la clase public function __construct($archivo, $objeto) { // Recuperamos el contenido del archivo $this->plantilla = file_get_contents($archivo) or die('Fallo en la apertura de la plantilla '.$archivo); // y guardamos la referencia al objeto $this->objeto = $objeto; // Extraemos todas las marcas de contenido preg_match_all('/\{[A-Za-z]+\}/', $this->plantilla, $el, PREG_PATTERN_ORDER); // Nos quedamos con la matriz de resultados $this->elementos = $el[0]; } // Este método es el encargado de procesar la plantilla public function procesaPlantilla() { // Tomamos la plantilla en una variable local, para // así no modificar el contenido original $pagina = $this->plantilla; // Recorremos la matriz de marcas de contenido foreach ($this->elementos as $el) { // Eliminamos los delimitadores { y } $el = substr($el, 1, strlen($el) - 2); // invocamos a la función del objeto $resultado = $this->objeto->$el(); // e introducimos su contenido en lugar de la marca $pagina = str_replace('{'.$el.'}', $resultado, $pagina); } /* * @todo Tratar de activar la compresión. */ // Si es posible comprimir // if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')) { // // introducimos la cabecera que indica que el contenido está comprimido // header('Content-Encoding: gzip'); // // y comprime al máximo la información antes de enviarla // return gzencode($pagina, 9); // } return $pagina; // enviamos sin comprimir } }