La clase Vista, usando MVC en PHP

Creado por richard  el 2014-06-05 22:35:10
Editar


Primero que todo devemos tener claro que es MVC.
El modelo–vista–controlador (MVC) es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información, y por otro lado para la interacción del usuario1 2 . Este patrón de arquitectura de software se basa en las ideas de reutilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento3 4 .

La clase Vista que no es otra cosa que un contenedor de las vistas o codigo HTML agrupandolas en secciones que se corresponden a las designadas en el layout hasta que sea propicio volcarlas en el cliente.

view.php
code: php
<?php
/**
* Esta obra está licenciada bajo la Licencia Creative
* Commons Atribución-CompartirIgual 4.0 Internacional.
* @license http://creativecommons.org/licenses/by-sa/4.0/deed.es_CL
* @author Richard Collao Olivares <http://www.richardcollao.cl>
*/

abstract class View
{
# Ruta donde se encuantras las vistas.
private static $_path_view;

# Este array contiene las distintas vistas agrupadas segun la seccion dentro del layout.
private static $_container;

# Nombre del layout, que por defecto es default
private static $_layout;

# Extencion usada para los archivos que contienen las vistas ejemplo .phtml o .php;
private static $_ext = '.php';


/**
* Inicializa la clase y establece la ruta donde se encuentran alojadas las vistas.
* $path_view, ruta donde se encuentran las vistas.
* $layout, establece el layout que mostrara la pagina por defecto su valor es default.
*/
public static function initialize($path_view, $layout = 'default')
{
self::$_container = array();
self::$_path_view = $path_view;
self::$_layout = $layout;
}

/**
* Captura las vistas, y las devuelve como un string.
* $file contiene el nombre del archivo o vista y $data los parametros que se le pasan a la vista.
*/
private static function _capture($file, $data)
{
ob_start();
require (self::$_path_view . $file . self::$_ext);
$view = ob_get_contents();
ob_end_clean();
return $view;
}

/**
* Si el archivo se recibe con la extencion que es opcional, esta se remueve.
*/
private static function _removeExtention($file)
{
if(substr($file, - strlen(self::$_ext)) == self::$_ext)
$file = substr($file, 0, strlen($file) - strlen(self::$_ext));
return $file;
}

/**
* Guarda la vista en un array contenerdor cuyo indice sera el nombre del archivo o $alias si es definido,
* ejemplo View::keep('head_1.phtml', $data, $alias = 'head')
*/
public static function keep($file, $data = array(), $alias = NULL)
{
# Si el archivo vista es enviado con la extencion esta sera removida;
$file = self::_removeExtention($file);

# Captura la vista.
$view = self::_capture($file, $data);

# Si no hay un alias toma el nombre del archivo.
empty($alias) ? $key = $file : $key = $alias;

# Guarda la vista en el contenedor.
self::$_container[$key][] = $view . PHP_EOL;
}

/**
* Devuelve el contenido de la vista como una cadena.
* ejemplo $footer = View::extract('footer.php', $data)
*/
public static function extract($file, $data)
{
$file = self::_removeExtention($file);
return self::_capture($file, $data);
}

/**
* Almacena una vista desde un string en un contenedor(el contenedor es compartido con el metodo keep)
* tambien se puede guardar una vista obtenida por extract() por lo que es posible hacer cambios sobre la marcha.
* ejemplo: View::insert(str_replace('&', '&', $footer), $alias)
*/
public static function insert($string, $alias, $important = FALSE)
{
if(empty(self::$_container[$alias]))
self::$_container[$alias] = array();

if ($important === FALSE)
self::$_container[$alias][] = $string;
else
array_unshift (self::$_container[$alias], $string);
}

/**
* Recupera el contenido de una vista que se ha almacenado previamente por los metodos keep o insert
* Al igual que el metodo extract devuelve un string.
* ejemplo echo View::show('head');
*/
public static function show($view)
{
if(key_exists($view, self::$_container))
return implode('', self::$_container[$view]);
}

/**
* Cambia el layout por defecto.
*/
public static function setLayout($layout)
{
$layout = self::_removeExtention($layout);
self::$_layout = $layout;
}

/**
* Muestra la pagina mediante el layout establecido, el cual volcara las vistas de forma organizada.
* Importante:la extencion del layout siempre debe ser .php ya que este invocara el metodo show de esta clase.
*/
public static function callLayout()
{
require (self::$_path_view . 'layouts' . DIRECTORY_SEPARATOR . self::$_layout . '.php');
}
}

?>
Servidor Web más utilizado, con mayor número de instalaciones a nivel mundial, es un proyecto de código abierto y uso gratuito, multiplataforma.
Conjunto de datos de un mismo contexto y almacenados sistemáticamente para su posterior uso.
Lenguajes que hacen referencia al codigo de marcado para la elaboración de páginas web.
Potente lenguaje de programación orientado a objetos, independiente del sistema operativo.
Lenguaje interpretado orientado a objetos desarrollado por Netscape que se utiliza en millones de páginas web y aplicaciones de servidor en todo el mundo
Sistema operativo de software libre inspirado en el sistema Unix, escrito por Linus Torvalds con la ayuda de miles de programadores en Internet
El modelado 3D es el proceso de desarrollo de una representación matemática de cualquier objeto tridimensional a través de un software especializado. Al producto se le llama modelo 3D
Lenguaje de programación principalmente orientado al desarrollo web, su código es ejecutado del lado del servidor.
Todo lo que no sea trabajo, solo temas recreativos para divertirse.