Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/12/2010, 15:25
Hidek1
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Crear sistema de templates

Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Sistema de Templates que enlaza PHP con las plantillas (MVC)
  4.  *
  5.  * Clase encargada de tomar los datos enviados desde
  6.  * PHP en forma de array y distribuirlos sobre un archivo- Template
  7.  * El sistema catura dentro del template las palabras entre {}
  8.  * y las reemplaza por el valor con la llave respectiva de un array asociativo
  9.  *
  10.  * @category MVC
  11.  * @subpackage Library Classes
  12.  * @copyright Copyright (c) 2010, Hidek1 [[email protected]]
  13.  * @license http://creativecommons.org/licenses/by-sa/2.0/cl/
  14.  * Atribución-Licenciar Igual 2.0 Chile.
  15.  * @since 0.1a
  16.  */
  17. class Template
  18. {
  19.     private $_filename;
  20.  
  21.     /**
  22.      * Obtiene la ruta al template
  23.      * este debe tener permisos de lectura
  24.      * retorna una Exception en caso de que
  25.      * el archivo especificado no se encuentre.
  26.      *
  27.      * @param string $filename
  28.      */
  29.     public function __construct($filename)
  30.     {
  31.         if (file_exists($filename)) {
  32.             $this->_filename = $filename;
  33.         } else {
  34.             throw new Exception("Template no encotrado.");
  35.         }
  36.     }
  37.  
  38.     /**
  39.      * Devuelve el template procesado con sus variables correspondientes
  40.      * captura dentro de este las palabras entre {} y las modifica por su
  41.      * valor correspondiente en el array
  42.      *
  43.      * $valores = array('foo' => 'bar');
  44.      * La palabra de prueba {foo}
  45.      *
  46.      * @param array $matriz
  47.      * @return string
  48.      */
  49.     public function render(array $matriz = array())
  50.     {
  51.         if (empty($matriz)) {
  52.             return file_get_contents($this->_filename);
  53.         } else {
  54.             foreach ($matriz as $key => $value) {
  55.                 $$key = $value;
  56.             }
  57.             $template = file_get_contents($this->_filename);
  58.             $template = str_replace(array('\\', '\''), array('\\\\', '\\\''), $template);
  59.             $template = preg_replace('/{([a-z]\w+?)}/i', "'.$$1.'", $template);
  60.             eval("\$template = '$template';");
  61.             return $template;
  62.         }
  63.     }
  64. }