Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/08/2007, 22:02
zsamer
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Re: consulta Zend

Otra forma de solucionarlo es simplemente extender la clase Zend_Controller_Action

Código PHP:
abstract class Mi_Controller_Action extends Zend_Controller_Action
{

    
/**
     * @var instance of view object
     */
    
protected $_view null;

    
/**
     * @var string Globale template file to render
     */
    
protected $_template 'main.php';
    
    
/**
     * @var array template vars to be passed to view
     */
    
protected $_vars = array();

    
/**
     * Bloque Menu ppal
     */
    
private function getNavigation()
    {
         
/*etc...*/
    
}

    
/**
     * Bloque comentarios
     */
    
private function getComments()
    {
         
/*etc...*/
    
}

    
/**
     * Bloque otro
     */
    
private function getOtro()
    {
         
/*etc...*/
    
}
    
/*......*/
    
public function __destruct()
    {
            
$this->_view->assign('navigation'$this->getNavigation());
            
$this->_view->assign('tagcloud'$this->getOtro());
            
$this->_view->assign('lastcomments'$this->getComments());
            
            print 
$this->_view->render($this->_template);
            
    }
/*....*/ 
Luego en cada action:

Código PHP:
$this->_view->assign('subtemplate''article/form.php'); 
Ej:
Código PHP:
class ArticleController extends Mi_Controller_Action
{
    private function 
buildFormAction($params)
    {
     
/*blablabla*/
        
$this->_view->assign('form_action''article/validate/');
        
       
//Esto muy importante ya que lo rendea en main.php
      
$this->_view->assign('subtemplate''article/form.php');
    }

View Main:

Código PHP:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><?php echo $this->escape($this->title); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="http://<?php echo $this->escape($_SERVER['HTTP_HOST']) . $this->escape($this->baseurl); ?>/">
<link href="files/css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="page">
<div id="header">
<h1><?php echo $this->escape($this->title); ?></h1>
</div>
<div id="main">
<div id="navi">

.....


<div id="content">
<?php $this->render($this->subtemplate); ?>
</div>
</div>
<div id="footer">
Copyright © 2007 - Yo
</div>
</div>
</body>
</html>
Otra forma es crear una clase Page que genere objeto para Header Y/O Footer (Podría ser una clase factory) y se instancia dentro del método $this->init( ) de cada controlador o del controlador padre el cual extenderan los controladores restantes, Luego en cada action la puedes usar EJ: $header->render() o $footer->render().

Espero que sirva.
Saludos.

Última edición por zsamer; 28/08/2007 a las 22:24