lunes, 19 de mayo de 2008

Action View Helper

Muchas veces vamos a necesitar ejecutar mas de un modulo dentro de un modulo.
Supongamos que tenemos el modulo home. El cual esta dividido en varias secciones, mostrar Banners, modulo de registro, modulo de login, modulo de ultimos comentarios, etc.

Si queremos ejecutar un controlador desde un modulo distinto. Tenemos que usar "Action View Helper", con solo ejecutar desde la vista una linea vamos a ejecutar ese controller y mostrar la vista. Dentro de la vista de nuestro modulo principal.

Por ejemplo:
para mostrar el modulo de registracion vamos a tener que poner esta linea en nuestro view, del home
1
<?php echo $this->action('formulario', 'index','registracion'); ?>



Quedaria asi, con algunos modulos agregados

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="content-type" content="text/html; charset=us-ascii" />
5 <script type="text/javascript"> var size=11;</script>
6 <link href="<?php echo $this->baseUrl; ?>/html/styles/estilo.css" rel="stylesheet" type="text/css" />
7 <link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/html/styles/moodalbox.css" type="text/css" media="screen" />
8 <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/html/clientScripts/mootools/mootools.js"></script>
9 <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/html/clientScripts/mootools/fvalidator.js"></script>
10 <script type="text/javascript" src="<?php echo $this->baseUrl; ?>/html/clientScripts/mootools/moodalbox.js"></script>
11 <title>Mi Web</title>
12 </head>
13 <body>
14 <div id="header"><!-- Cabecera -->
15 <h1 class="titulo1" title="titulo de mi modulo">Este es el titulo de mi modulo</h1>
16 </div>
17 <div id="menu">
18 <ul class="menu">
19 <li>Home</li>
20 <li>Foro</li>
21 <li>Blog</li>
22 <li>Registrate</li>
23 <li>Ingresar</li>
24 </ul>
25 <?php echo $this->action('listar', 'index','autentication'); ?>
26
</div>
27 <div id="contenido">
28 <div id="registracion"><?php echo $this->action('formulario', 'index','registracion'); ?></div>
29 <div id="ultimos_post"><?php echo $this->action('top10', 'index','foro'); ?></div>
30 </div>
31 </body>
32 </html>



Parametros de Action View Helpers.

$this->action(action, controller, module, arrayParameters);
* action: Es la accion del Controlador que vamos a ejecutar.
* controller: nombre del archivo del controller.
* modulo: puede o no ser necesario, nos sirve para especificar sobre que modulo estamos hablando en mi caso todos los modulos tienen un indexController, para que me funcione si o si tengo que indicar el modulo.
* arrayParameters: Podemos enviar parametros a nuestro controllers, se lo enviamos en un array.

Edito y agrego algo importante, como obtener los parametros que enviamos por array al controller. Para eso tan solo tenemos que desde nuestro action $this->getRequest()->nombredelindice por ejemplo si enviamos un array como el siguiente:

array("nombre"=>"Juan")

Desde el controller lo tomamos asi:
$this->getRequest()->nombre

Es bastante facil de implementar.

Espero que les sirva saludos.

4 comentarios:

Pablo Morales dijo...

No entro todo el html!

GusGus dijo...

Y si la acción que estas llamando del otro modulo tiene Layout, se deshabilita también?

Muy interesante este helper.

Pablo Morales dijo...

Tendrias que probarlo, realmente no se.

Pablo Morales dijo...

@gus: proba con esta linea
$this->_helper->layout()->disableLayout();