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

[ZF] Pasar parámetros a un view helper

Estas en el tema de [ZF] Pasar parámetros a un view helper en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Tengo un View Helper para hacer un Menu Ahi consulto al modelo pero resulta que es dinamico y dependiendo de alguna opcion se dibujara ...
  #1 (permalink)  
Antiguo 10/12/2009, 10:14
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
[ZF] Pasar parámetros a un view helper

Hola.

Tengo un View Helper para hacer un Menu Ahi consulto al modelo pero resulta que es dinamico y dependiendo de alguna opcion se dibujara otro menu.....

No manejo controller para el menu solo es el viewHelper en el layout

Código PHP:
$this->menu(); 
Se pueden recibir parametros en el view helper...?

Tengo esto

Código PHP:
class My_View_Helper_Menu 
{
       public function 
menu($parametro)
      {
              
mdl = new Model_Menu();
              
mdl->getMenu($parametro);

              
$html "<div><ul>........."
      
              
return $html;
      }

Quisiera Obtener $parametro se puede..?
  #2 (permalink)  
Antiguo 10/12/2009, 10:31
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Datos del Modelo al ViewHelper - ZF

Código PHP:
//en la vista llamas al view helper
echo $this->menu("top");

echo 
$this->menu("lateral"); 
  #3 (permalink)  
Antiguo 10/12/2009, 10:50
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Datos del Modelo al ViewHelper - ZF

Lo que pasa es que ese parametro es el id del otro menu que quiero presentar
entnces no puedo ponerlo fijo

estaba leyendo y no se si se puede hacer esto en el View Helper
Zend_FrontController::getInstance() getParams o algo asi......
  #4 (permalink)  
Antiguo 10/12/2009, 11:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Datos del Modelo al ViewHelper - ZF

Puedes recibir "n" parámetros en tu view helper:
Código PHP:
Ver original
  1. echo $this->menu($param1, $param2, $param3, $param4);

Si no quieres pasarlos así siempre puedes usar el registry (Zend_Registry).

Saludos.
  #5 (permalink)  
Antiguo 10/12/2009, 15:35
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Hola Amigo gracias por tu respuesta
He estado leyendo algunos temas presentados aqui
  • Zend Framework + Layouts: Se pueden usar Controllers?
  • ActionStack y Layout
  • Menu lateral en zend framewrok

Dentro de los mismos se manifiesta la utilizacion de ActionHelper y ActionStack para la presentacion de un Menu dinamico en una seccion de la pagina. Sin embargo despues se dice que estos disminuyen el rendimiento de la aplicacion.

Ademas se deja claro que utilizar ViewHelper es la manera mas limpia de programar.

Entonces:
Comenze elaborando un ViewHelper para dibujar un menu principal en una seccion de la pagina, y cada item de este contiene acciones (actions y controller) para la presentacion del contenido respectivo, ademas este tambien debe presentar otro menu en otra seccion de mi pagina, es decir este item debe presentar contenido y mostrar otro menu diferente al menu principal dentro de la misma pagina, como menu dependientes, es por esto que preguntaba si se pueden recibir parametros en el View Helper por la url debido a que este view helper me dibuja todos los menus, como enviar la variable al view helper y no al controller y action del item.

Se hablaba de utilizar ActionStack y plugins para realizar esto sin embargo tambien hablaban de su rendimiento...?

Cual seria la solucion?
De antemano agradezco su respuesta
  #6 (permalink)  
Antiguo 11/12/2009, 06:51
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: [ZF] Pasar parámetros a un view helper

mmm no entendi exactamente lo que hiciste, sin embargo sin entender del todo lo que quieres hacer, te respondo que el actionStack es 100% evitable y reemplazable por viewHelpers, asi que por alli es el camino correcto

Saludos
  #7 (permalink)  
Antiguo 11/12/2009, 11:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

Tu puedes leer las propiedades de tu view en tu viewhelper simplemente usando $this->view dentro de tu viewhelper.

Saludos.
  #8 (permalink)  
Antiguo 11/12/2009, 12:17
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

hola
Quiero hacer un menu dependiente
cuando de click en un item de 1 menu aparesca un segundo menu, para q esto suceda necesito enviar por la url un parametro q luego debe ser interpretado por el view helper y asi me pueda cargar el segundo menu de la bd.
Se puede obtener un parametro via get o post en el view helper?

Última edición por oswaldochc; 11/12/2009 a las 12:26
  #9 (permalink)  
Antiguo 11/12/2009, 14:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

Si se puede, pero lo mejor es que pases el parámetro desde tu controller, o que directamente al menu le pases el parámetro al crearlo, por ejemplo si es desde el controller:
Código PHP:
Ver original
  1. <?php
  2. public function algoAction()
  3. {
  4.          $this->view->parametro = $this->_getParam('parametro');
  5. }
  6. ?>
  7. // luego en tu view
  8. <?php echo $this->menu($this->parametro); ?>

Saludos.
  #10 (permalink)  
Antiguo 12/12/2009, 11:00
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Gracias Amigo

Entonces quedaria asi

Contoller
Código PHP:
class Menu_IndexController extends Zend_Controller_Action {
        public function 
indexAction() {
             
$this->view->parametro $this->_getParam('parametro');
    }

View
Código PHP:
<?php echo $this->menu($this->parametro); ?>
Layout
Código PHP:
<?php
echo $this->doctype();
?>
<html>
<head>
<?php 
echo $this->headTitle('Portal')
    ->
setSeparator(' / ')->setIndent(' ');
?>  
<?php echo $this->headMeta()->setIndent(' '?>
<?php 
echo $this->headLink()->setIndent(' '?>
<?php 
echo $this->headScript()->setIndent(' '?>
</head>

<body>
<div id="rigth">
   <?php echo $this->action("index","index","menu","parametro1"); ?>     
</div>
<div id="content">
   <?php echo $this->layout()->content?>     
</div>
<div id="left">
   <?php echo $this->action("index","index","menu","parametro2"); ?> 
</div>

</body>

</html>

Cada item de mi menu esta redireccionado a controllers y actions (otros modulos para presentar contenido) diferentes y asi no pasara por el menu controller. dandole el parametro. No quiero utilizar ActionStack ni ActionHelper por lo antes mencionado (rendimiento) entonces como haria para que pase por el controller dandole el parametro
  #11 (permalink)  
Antiguo 12/12/2009, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

Recuerda que el layout se inyecta al final, por lo que tu puedes usar lo mismo en tu viewhelper para leer desde el view el parámetro.

Saludos.
  #12 (permalink)  
Antiguo 12/12/2009, 13:11
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: [ZF] Pasar parámetros a un view helper

A mi parecer lo correcto seria esto

Código PHP:
<?php
echo $this->doctype();
?>
<html>
<head>
<?php 
echo $this->headTitle('Portal')
    ->
setSeparator(' / ')->setIndent(' ');
?>  
<?php echo $this->headMeta()->setIndent(' '?>
<?php 
echo $this->headLink()->setIndent(' '?>
<?php 
echo $this->headScript()->setIndent(' '?>
</head>

<body>
<div id="rigth">

   <?php echo $this->menu("parametro1"); ?>     
</div>
<div id="content">
   <?php echo $this->layout()->content?>     
</div>
<div id="left">
   <?php echo $this->menu("parametro2"); ?> 
</div>

</body>

</html>

Y nada de actionViewHelper ni de codigo mal puesto en los controladores, cada cosa en su lugar

Saludos
  #13 (permalink)  
Antiguo 14/12/2009, 15:56
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Hola, gracias por sus respuestas,

He hecho el ViewHelper y quisiera saber si es apropiado hacer esto
Código PHP:
class My_View_Helper_Menu 
{
       public function 
menu()
      {
               
//Hacer Esto       
               
$front Zend_Controller_Front::getInstance();
               
$param $front->getRequest()->getParam('item');
                
/////

              
mdl = new Model_Menu();
              
mdl->getMenu($param);

              
$html "<div><ul>........."
      
              
return $html;
      }

Atento a sus respuestas ...
Gracias
  #14 (permalink)  
Antiguo 14/12/2009, 18:35
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: [ZF] Pasar parámetros a un view helper

lo mejor mejor mejor es que reciba $param como parametro, a mi gusto tambien es bastante mas lindo :P pero bueno, se han visto cosas peores que esa, y todos nos tentamos alguna vez con hacerlo... se puede llegar a aceptar... :P

Saludos
  #15 (permalink)  
Antiguo 15/12/2009, 09:59
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Hola
la verdad es q utilice esto
Código PHP:
               $front Zend_Controller_Front::getInstance();
               
$param $front->getRequest()->getParam('item'); 
xq necesitaba obtener el parametro por mi url y como no tengo un controlador especifico para obtenerlo de forma mas limpia lo puse en el view helper

Gracias por sus respuestas
  #16 (permalink)  
Antiguo 15/12/2009, 13:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

Lo que puedes hacer es también un Controller Plugin, que inyecte ese parámetro, así no importa ese controller en específico y creo es más limpio

Saludos.
  #17 (permalink)  
Antiguo 15/12/2009, 14:33
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Hola
Con respecto al controller Plugin
Es algo asi (Extraido de la ayuda de Zend)

Código PHP:
class MyPlugin extends Zend_Controller_Plugin_Abstract{    
    public function 
routeStartup(Zend_Controller_Request_Abstract $request)
    {       
        
$this->getResponse()
                 ->
appendBody("<p>routeStartup() called</p>\n");    
    }    
     
    public function 
routeShutdown(Zend_Controller_Request_Abstract $request)
    {    
        
$this->getResponse() 
                ->
appendBody("<p>routeShutdown() called</p>\n");    
    }
    
    public function 
dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
            
$this->getResponse()
                 ->
appendBody("<p>dispatchLoopStartup() called</p>\n"); 
    }
    
    public function 
preDispatch(Zend_Controller_Request_Abstract $request)
    {
            
$this->getResponse()
                 ->
appendBody("<p>preDispatch() called</p>\n");
    }    
    
    public function 
postDispatch(Zend_Controller_Request_Abstract $request
    {        
        
$this->getResponse()
                 ->
appendBody("<p>postDispatch() called</p>\n");
    }
    
    public function 
dispatchLoopShutdown()
    { 
           
$this->getResponse()   
              ->
appendBody("<p>dispatchLoopShutdown() called</p>\n");    
    }

Pero como lo utilizaria con el viewHelper...

Agradeciendo su ayuda......
  #18 (permalink)  
Antiguo 15/12/2009, 15:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

Lo que haces es crear un plugin, que lea del request el parámetro y lo inyecte en la vista, y así desde tu vista lees ese parámetro, yo lo haría en el postDispatch que es después de generar la action en el controller.

Saludos.
  #19 (permalink)  
Antiguo 18/12/2009, 13:10
Avatar de oswaldochc  
Fecha de Ingreso: octubre-2009
Ubicación: Ecuador
Mensajes: 41
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: [ZF] Pasar parámetros a un view helper

Gracias Amigo

El item del Menu tiene esta url que se dibuja con mi ViewHelper a traves de la etiqueta <a href....
/zf/portalweb/index/index/item/4

Es posible realizar, que al dar clic en esta opcion, no aprezca este "item/4" en la url, es decir, solo /zf/portalweb/index/, pero igual recibirla (como metodo Post)

Agradeciendo sus respuestas
  #20 (permalink)  
Antiguo 18/12/2009, 15:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [ZF] Pasar parámetros a un view helper

No, ya que para eso tienes que pasar los datos por post y el tag <a> no permite eso, para eso tienes que usar Javascript para hacer lo que se conoce como "Post Back" que es un post oculto, con una forma oculta.

Saludos.
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 08:37.