Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2011, 11:58
Hidek1
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Aporte: Class para el uso de plantillas

En realidad no recuerdo a quien le habia prometido publicar la forma en la que trabajo las plantillas en php.
y como no lo recuerdo decidí crear un nuevo tema, asi da para que lo critiquen y esas cosas...


Código PHP:
<?php
/**
 * Khaus Framework
 *
 * LICENSE
 *
 * This source file is subject to the Public license Creative Commons LPCC
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://creativecommons.org/licenses/by-nc/2.0/cl/
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * @category    Khaus
 * @package     Khaus_View
 * @copyright   Copyright (c) 2010 - 2011, Khaus Corp. Chile [[email protected]]
 * @license     Atribucion-Licenciar Igual 2.0 Chile. CC BY-NC 2.0
 * @version     8:20110527
 */

/**
 * Template Class
 *
 * Otorga el uso de plantillas dentro de la aplicacion.
 * Se debe especificar la ruta del archivo template
 * este puede ser de cualquier extension compatible con php.
 * los datos se asignan a travez de la propiedad publica $view
 * y desde la plantilla se llaman de la misma forma
 *
 * @example plantilla.phtml
 * <div><?php echo $this->variable; ?></div>
 *
 * @example index.php
 * $template = new Khaus_View_Template('plantilla.phtml');
 * $template->view->variable = 'datos';
 * echo $template->render();
 */
class Khaus_View_Template
{

    public 
$view;
    
    private 
$_filename;
    
    
/**
     * Metodo constructor
     *
     * Genera la instancia de $this->view para guardar
     * los parametros que se entregaran a la vista y asigna
     * la ruta del template a utilizar
     *
     * @throws si la ruta es incorrecta
     * @param string $filename[optional] ruta del template
     */
    
public function __construct($filename)
    {
        
// IF: La ruta del template es incorrecta
        
if (!is_file($filename)) {
            
$message sprintf('Template no encontrado (%s)'$filename);
            throw new 
Exception($message);
        }
        
$this->view = new stdClass();
        
$this->_filename $filename;
    }

    
/**
     * Retorna las peticiones de variables de la plantilla
     *
     * Si desde el template se llama directamente a la variable
     * con el metodo magico __get se captura la peticion y se envia
     * el valor correspondiente a lo almacenado dentro del objecto view
     * por lo tanto desde la plantilla se pueden traer los datos de dos formas
     * @example :
     *
     *      <?php echo $this->view->dato; ?>
     *      <?php echo $this->dato; ?>
     *
     * @param   string $name nombre del parametro
     * @throws  en caso de no existir el parametro
     * @return  string
     */
    
public function __get($name)
    {
        
// IF: el nombre del atributo no existe dentro del objeto view
        
if (!isset($this->view->$name)) {
            
$message sprintf('Parametro no existente (%s)'$name);
            throw new 
Exception($message);
        }
        return 
$this->view->$name;
    }

    
/**
     * Entrega el template procesado
     *
     * Mediante control de flujos captura la plantilla
     * por lo tanto se asignan las variables solicitadas
     * al objeto mediante $this
     *
     * @throws si la plantilla no a sido asignada
     * @return string template procesado
     */
    
public function render()
    {
        
ob_start();
        include 
$this->_filename;
        
$template ob_get_contents();
        
ob_end_clean();
        return 
$template;
    }

    
/**
     * Imprimir template
     *
     * Si se requiere imprimir o usar directamente el objeto como string
     * utiliza el metodo render para devolver el template procesado
     *
     * @access public
     */
    
public function __toString()
    {
        return 
$this->render();
    }
}
si tienen alguna duda.. comenten!


PD: los tildes han sido omitidos intencionalmente de los comentarios por razones que ni yo mismo entiendo
PD2: olvide poner las etiquetas del post :C
__________________
More about me...
~ @rhyudek1
~ Github

Última edición por Hidek1; 27/05/2011 a las 16:27 Razón: cambios sugeridos por masterpuppet