Foros del Web » Programando para Internet » PHP » Zend »

Llamar a una funcion desde la vista

Estas en el tema de Llamar a una funcion desde la vista en el foro de Zend en Foros del Web. Hola de nuevo. Quiero desde una vista llamar a una función, ¿Cómo se haría? Si yo en mi controlador index tengo una funciona por ejemplo: ...
  #1 (permalink)  
Antiguo 28/06/2013, 09:21
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Llamar a una funcion desde la vista

Hola de nuevo.

Quiero desde una vista llamar a una función, ¿Cómo se haría?

Si yo en mi controlador index tengo una funciona por ejemplo:

public function hola()
{
echo ("Hola!");
}

¿Cómo podría dentro de la vista index.phtml del action index del controlador index llamar a esa función que está dentro del mismo controlador?

Gracias.
  #2 (permalink)  
Antiguo 28/06/2013, 09:59
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Llamar a una funcion desde la vista

Si hago esto, no me funciona porque la función hola no la he creado como un action, sin embargo si pongo cualquier action que tengo en index me funciona.
¿Hay alguna forma de hacerlo sin que la función hola sea un action?

Código PHP:
Ver original
  1. <?php echo $this->action('hola','index',null, array()); ?>
  #3 (permalink)  
Antiguo 28/06/2013, 11:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una funcion desde la vista

Tienes que hacer un View Helper, no dentro del controlador, si no como su propio helper para poderlo leer en el view.

Saludos.
  #4 (permalink)  
Antiguo 01/07/2013, 10:46
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Llamar a una funcion desde la vista

No sé si será esa la solución de lo que quiero hacer. Lo explico un poco.

En una vista tengo un en javascript un datepicker al que le voy a añadir beforeshowsdays.

En la función beforeshowsdays de javascript quiero hacer una consulta a la base de datos pasandole el día para ver si lo debo deshabilitar o no.

Mi idea era crear una función en el controlador que hiciese la llamada al modelo y le pasase los resultados a la vista.

Quiero hacerlo así por el patrón MVC. No sé si será la manera correcta de hacerlo...
  #5 (permalink)  
Antiguo 01/07/2013, 12:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una funcion desde la vista

¿y porque no haces la consulta en el controlador y solo devuelves a la vista los días?...
  #6 (permalink)  
Antiguo 01/07/2013, 12:28
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Llamar a una funcion desde la vista

Porque necesito saber el día y otros datos para consultar primero en la base de datos.

Otra duda. He creado este view helper: en application/views/helpers/

Código PHP:
Ver original
  1. <?php
  2. class Zend_View_Helper_Consultas extends Zend_View_Helper_Abstract
  3. {
  4.     public function usuarios()
  5.     {
  6.         $usuario = new Application_Model_DbTable_Usuario();
  7.         return $usuario->listar();
  8.     }
  9. }

En la vista lo he llamado de esta forma:
Código PHP:
$row=$this->usuarios();
                
print_r($row); 
Y me aparece el siguiente error:

an error occurred
application error

exception information:

Message: Plugin by name 'Usuarios' was not found in the registry; used paths: ZendX_JQuery_View_Helper_: ZendX/JQuery/View/Helper/ Zend_View_Helper_: Zend/View/Helper/;C:/xampp/xampp/htdocs/asociacion/application/views\helpers/

¿Lo estoy llamando bien?

Gracias por la ayuda
  #7 (permalink)  
Antiguo 01/07/2013, 13:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una funcion desde la vista

El plugin y la función se tienen que llamar igual, ejemplo:

Código PHP:
Ver original
  1. class Application_View_Helper_FooBarBaz extends Zend_View_Helper_Abstract
  2. {
  3.          public function fooBarBaz() { }
  4. }
  #8 (permalink)  
Antiguo 02/07/2013, 08:11
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Llamar a una funcion desde la vista

Ahh, vale gracias.

¿Hay forma de crear varias funciones dentro del mismo plugin? Si se puede, ¿cómo se les llamaría en la vista?

Gracias de nuevo
  #9 (permalink)  
Antiguo 02/07/2013, 08:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: Llamar a una funcion desde la vista

Claro que puedes, simplemente retorna $this para poder hacer chaining ;)
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 02/07/2013, 09:29
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Llamar a una funcion desde la vista

¿Quedaría de esta forma?:

Código PHP:
<?php
class Zend_View_Helper_Consultas extends Zend_View_Helper_Abstract
{
    public function 
consultas()
    {
        return 
$this;
    }
        public function 
usuarios()
    {
        
$camping = new Application_Model_DbTable_Camping();
        return 
$camping->listar();
    }


}     public function 
hola()
    {
        echo 
"HOLA";
    }
En la vista se llamaría de esta manera:

Código PHP:
$this->consultas()->usuarios(); 
Gracias.
  #11 (permalink)  
Antiguo 02/07/2013, 10:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una funcion desde la vista

Así es.

Saludos.

Etiquetas: funcion
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 05:56.