May 19th, 2008 Category: Zend Framework
6 Comments »

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.


Invitame una Cerverza


Comentar


6 Responses

Pablo Morales 2008-05-19 12:46:00
No entro todo el html!

GusGus 2008-05-20 05:06:00
Y si la acción que estas llamando del otro modulo tiene Layout, se deshabilita también?

Muy interesante este helper.

Pablo Morales 2008-05-20 11:47:00
Tendrias que probarlo, realmente no se.

Pablo Morales 2008-05-20 13:00:00
@gus: proba con esta linea
$this->_helper->layout()->disableLayout();

aviros 2009-06-28 11:14:44
Hola Pablo.

Tan solo decirte, que estoy aprendiendo ZF y uno de los problemas más grandes que tenía era integra varias "vistas parciales" en una vista. Por ejemplo, una portada con bastantes "widgets" de distintos controladores...etc. Gracias a este post creo que voy a tener un problema menos.

Mil gracias por tu tiempo y compartir tu conocimiento.

Alejandro 2009-12-17 17:12:23
Hola amigo, me podrias ayudar con algo... como hago para ejecutar una accion por medio de un javascript.
Lo que quiero hacer es que cuando cambie un combox "evento onchange" se ejecute una acción
Gracias