Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Ayuda con los renders !!

Estas en el tema de Ayuda con los renders !! en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Como podeis ver, en esta aplicación hay un Layout llamado "default.phtml" que contiene el render de tres vistas header, body y footer.phtml Estos 3 ...
  #1 (permalink)  
Antiguo 15/02/2009, 06:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 0
Ayuda con los renders !!

Hola,

Como podeis ver, en esta aplicación hay un Layout llamado "default.phtml" que contiene el render de tres vistas header, body y footer.phtml

Estos 3 archivos, dentro tienen variables del layout tipo: $this->layout()->loginForm; o $this->layout()->headerMenú

Una vez las variables de layout están dispuestas les asigno vistas, esta asignación de las variables la estoy haciendo desde My_Controller_Action (extendiendo Zend_controller_Action para conseguir un comportamiento igual en todos los controladores)

Pero no acabo de aclararme muy bién sobre como usar el render, ya que este coge las vistas del mismo directorio en que fue llamado el script...

He probado asignando variables al objeto layout y con el getResponse. Pero así tendré que ir cambiando para cada vista el setBasePath() en función de donde se encuentren ???

No puede hacerse de una forma un poco más... limpia ?? Que me recomiendan ???
Gracias !!!

Mejor les pongo los códigos:

Código:
app2/
    config/
        config.ini
    layouts/
        default.phtml
        header.phtml
        body.phtml
        footer.phtml
    models/
    modules/
        default/
            controllers/
                IndexController.php
            views/
                filters/
                helpers/
                scripts/
                    index/
                        index.phtml
        users/
            controllers/
                AuthController.php
            views/
                filters/
                helpers/
                scripts/
                    auth/
                        index.phtml
    Bootstrap.php
default.phtml
Código PHP:
<!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=utf-8" />
        <title>app2</title>
        <base href="http://localhost/app2/" />
    </head>
    <body>
        <div id="content">
            <?php 
            
echo $this->render('header.phtml');
            echo 
$this->render('body.phtml');
            echo 
$this->render('footer.phtml');
            
?>
        </div>
    </body>
</html>
Los otros tres layouts ( header, body y footer ):
Código PHP:
// header.phtml
<div id="header">
    <h2>HEADER VIEW</h2>
    <?php
    
if (!$this->layout()->user) {
        echo 
$this->layout()->loginForm;
    } else {
        echo 
"Bienvenido";
    }
    
?>
    
    <?php echo $this->layout()->headerMenu?>
</div>

// body.phtml
<?php echo $this->layout()->content?>

// footer.phtml
<?php echo $this->layout()->footer?>
Y aquí como le asigno los valores desde My_Controller_Action:
Código PHP:
<?php
abstract class My_Controller_Action extends Zend_Controller_Action
{
    public function 
preDispatch()
    {
        
$this->view->baseUrl $this->_request->getBaseUrl();
    }
    
    public function 
init()
    {
        
parent::init();

                
// Probé a asignar algunas variables al objeto layout
        
$view Zend_Layout::getMvcInstance();
        
$view->user Zend_Auth::getInstance()->hasIdentity();
        
        
$view->headerMenu "headerMenu";
        
$view->footer "footer";

                
// También probé mediante $response->append
        
$response $this->getResponse();
        
$view = new Zend_View();
        
$view->setBasePath(APPLICATION_PATH '/modules/users/views');        
        
$response->append('loginForm'$view->render('auth/index.phtml'));

                
// Las dos formas funcionan correctamente
                // Pero no me parece que sigan "buenas maneras" esas formas de hacer 
    
}
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:52.