Le doy vueltas y mas vueltas a esto de la clase vista y las plantillas y me gustaria saber una simple y buena manera de hacerlo.
Me explico. Estoy desarrollando un proyecto MVC y tengo dudas en algunas decisiones.
Tengo la clase vista
Código PHP:
abstract class ClaseVista{
private $_peticion;
private $_css;
private $_js;
private $_jsPlugin;
private $_acl;
private $_rutas;
public function __construct( Peticion $peticion ) {
$this->_peticion = $peticion;
$this->_css = array();
$this->_js = array();
$this->_jsPlugin = array();
//$this->_acl = $_acl;
$this->_rutas = array();
}
public function renderizar( $plantilla, $marco = 'default')
{
$rutaPlantilla = DIR_VISTAS . $this->_peticion->getControlador() . DS . $plantilla . '.phtml';
if( is_readable( $rutaPlantilla ) ){
$class_vars = get_class_vars( get_class( $this ) );
$class_properties = get_object_vars( $this );
$class_data = array_diff_key ( $class_properties , $class_vars );
foreach ($class_data as $key => $value)
$$key = $value;
// incluyo las plantillas phtml
include_once ( DIR_VISTAS . 'layout' . DS . 'cabecera_html.phtml' );
include_once ( DIR_VISTAS . 'layout' . DS . $marco . DS . 'cabecera.phtml' );
include_once ( $rutaPlantilla );
include_once ( DIR_VISTAS . 'layout' . DS . $marco . DS . 'pie.phtml' );
}else {
throw new MiExcepcion('Error de vista',array('rutaPlantilla' => $rutaPlantilla, 'plantilla' => $plantilla, 'marco' => $marco));
}
}
public function setCss(array $css, $url = URL_CSS )
{
if( is_array($css) && count($css) ){
for( $i=0; $i < count($css); $i++ ){
if ( is_readable( DIR_CSS . $css[$i] . '.css' ) )
$this->_css[] = $url . $css[$i] . '.css';
else
throw new MiExcepcion('Error en funcion Vista->setCss, parametros valor incorrecto.', array( css => $css, url => $url ) );
}
} else {
throw new MiExcepcion('Error en funcion Vista->setCss, parametros vacios.');
}
}
...
public function printCss(){
if(isset($this->_css) && count($this->_css))
for($i=0; $i < count($this->_css); $i++)
echo ' <link href="'.$this->_css[$i].'" rel="stylesheet" type="text/css" />'.PHP_EOL;
}
...
}
Código PHP:
class Vista extends ClaseVista{
public function __construct( Peticion $peticion ) {
parent::__construct( $peticion );
$this->setCss( array('micss') );
$this->setJsPlugin(array('jquery','jquery.dataTables'));
$this->rutas = array(
'url_base' => URL_BASE,
'url_img' => URL_IMG,
);
$this->menu = array(
'inicio' => array(
'titulo' => 'Inicio',
'enlace' => URL_INICIO ),
'categorias' => array(
'titulo' => 'Categorías',
'enlace' => URL_CATEGORIAS ),
'productos' => array(
'titulo' => 'Productos',
'enlace' => URL_PRODUCTOS ),
'pedidos' => array(
'titulo' => 'Pedidos',
'enlace' => URL_PEDIDOS ),
'devoluciones' => array(
'titulo' => 'Devoluciones',
'enlace' => URL_DEVOLUCIONES ),
'clientes' => array(
'titulo' => 'Clientes',
'enlace' => URL_CLIENTES ),
'roles' => array(
'titulo' => 'Roles',
'enlace' => URL_ROLES ),
'usuarios' => array(
'titulo' => 'Usuarios',
'enlace' => URL_USUARIOS ),
'otros' => array(
'titulo' => 'Otros',
'enlace' => URL_OTROS )
);
$this->item = $peticion->getControlador();
}
}
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/> <meta name="author" content="chema" /> <title><?php if(isset($titulo)) echo $titulo; ?></title> <?php $this->printCss(); $this->printJsPlugin(); $this->printJs(); ?> </head> ...
Código HTML:
<body> <div id="web" class="contenedor"> <div id="cabecera_de_web" class="contenedor"> <div id="cabecera_de_web_titulo" class="contenido sin_margen"> <a href="<?php echo($rutas['url_base']);?>">Gestion MiMascota.com</a> </div> <div class="clear"></div> </div> <div id="navegador_de_web" class="contenedor"> <div id="navegador_de_web_enlaces" class="contenido sin_margen"> <ul> <?php if( !empty( $menu ) ): foreach( $menu as $key => $value ): if ( !empty($item) && ( $key == $item )):?> <li><a href="<?php echo $value['enlace']; ?>" class="selected"><?php echo $value['titulo']; ?></a></li> <?php else: ?> <li><a href="<?php echo $value['enlace']; ?>" ><?php echo $value['titulo']; ?></a></li> <?php endif; endforeach; endif; ?> </ul> </div> <div class="clear"></div> </div> <div id="cuerpo" class="contenedor">
O por ejemplo si es buena practica, estaba pensando en crear una funcion tal que:
Código PHP:
public function printVar($var){
if (!empty($var))
echo $var;
}
Código PHP:
<?php $this->printVar($titulo); ?>
Código PHP:
<?php if(!empty($titulo)) echo $titulo; ?>
¿ Es buena practica combinar este tipo de funciones con codigo php normal de condicionales if y bucles for, etc. en las plantillas ? ¿ Que contras tiene ? ¿ como lo deberia hacer ?
¿ Que otras mejores soluciones hay ? Ya se que muchos van a decir que aprender un framework, tal que Zenk, Symphony, ... etc pero yo simplemente busco una manera buena y sencilla manera de hacerlo sin tener que aprender un framework por el momento.
Gracias.