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

Como asignar un boton una action

Estas en el tema de Como asignar un boton una action en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola.. necesito ayuda, estoy trabajando con zend, y pues tengo un formulario dond tengo un submit y un boton, el submit hace la accion que ...
  #1 (permalink)  
Antiguo 21/10/2009, 07:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Como asignar un boton una action

Hola.. necesito ayuda, estoy trabajando con zend, y pues tengo un formulario dond tengo un submit y un boton, el submit hace la accion que esta en el setAction del controlador, y el boton tengo q asignarle otra accion pero no m reacciona a esa accion.. l muestro como lo tengo

$this->addElement('button', 'buscar', array(
'ignore' => true,
'label' => 'Buscar',
'onclick' => 'javascript:location= "./form/buscar"',
'decorators' => $buttonDecorators,

));
quiero saber q hice mal, porq si coloco los 2 submit el no sabe a cual va a reaccionar... De antemano gracias!!!!
  #2 (permalink)  
Antiguo 21/10/2009, 08:28
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: Como asignar un boton una action

Mensaje trasladado desde PHP a PHP orientado a objetos
  #3 (permalink)  
Antiguo 21/10/2009, 08:28
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: Como asignar un boton una action

El problema ya te lo habia comentado ese código JS solo redirecciona, tienes que hacer una función en JS para cambiar dinámicamente el action del form y llamar al evento submit del formulario.

Saludos.
  #4 (permalink)  
Antiguo 21/10/2009, 12:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

ok esta bien.. pero el problema es como hago para llamar el javascript en el onclick del boton...
estuve probando asi:
$this->addElement('button', 'buscar', array(
'ignore' => true,
'label' => 'Buscar',
'type' => 'submit',
'onclick' => 'javascript:location.href= "mifuncion(buscar)"',
'decorators' => $buttonDecorators,

));
pero de verdad aqui estoy es a ver si funciona porq ni idea...
mifuncion es un javascript:
function mifuncion(tipo)
{
if (tipo=="buscar")
{
form.action="buscar()"
form.submit();
}
  #5 (permalink)  
Antiguo 21/10/2009, 14:14
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: Como asignar un boton una action

No, te recomiendo estudies un poco de Javascript, solamente necesitas llamar a la función, location.href es otra propiedad que hace la redirección.

Saludos.
  #6 (permalink)  
Antiguo 21/10/2009, 14:17
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Como asignar un boton una action

Código PHP:
$this->addElement('button''buscar', array(
'ignore' => true,
'label' => 'Buscar',
'type' => 'submit',
'onclick' => 'mifuncion(\'buscar\')',
'decorators' => $buttonDecorators,
)); 
por otro lado tienes un error en tu js donde pones form.action="buscar()", el action debe ser una url

aunque no entiendo para que eso, el boton no deberia ser tipo "button" sino tipo "submit", ponerle el action al form con setAction() y listo, te estas complicando sin necesidad

Saludos
  #7 (permalink)  
Antiguo 21/10/2009, 14:43
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Hola rodrigo_00; yo se q colocandole el action al form con setAction() lo ejecuta, pero lo q pasa es que en este form tengo un submit y un boton; y estos deben hacer acciones distinta eso es lo q no c como decirle cual opcion va ejecutar... y el javascript esta en otra carpeta donde estan los js... como hago para decirl al boton la accion q tiene q ejecutar??????
:)
  #8 (permalink)  
Antiguo 21/10/2009, 14:56
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Como asignar un boton una action

la logica deberia ser distinta

tienes dos botones, "boton1" y "boton2"

luego en el controlador identificas que buton fue el que provoco el submit del form

Código PHP:
if ($this->getRequest()->isPost()) {

//el boton que se clickeo va a tener algun valor y el otro va a estar vacio
$boton1 $_POST["boton1"];
$boton2 $_POST["boton2"];

if(!empty(
$boton1)) {
 
//aplicas la logica necesaria para el caso de enviar el boton1
} else {
 
//aplicas la logica necesaria para el boton2
}


luego sigues todo normal, o si quieres puedes hacer un forward o un redirect a otro lugar

Saludos
  #9 (permalink)  
Antiguo 22/10/2009, 07:35
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Hola rodrigo_00, hice lo q m dijistes y m funciona, pero tengo un problemita necesito q cuando sea el boton 2(enviar) este m envie a otro controlador, lo hice con el _redirect pero necesito q no c m pierdan los datos q trae el otro formualrio... Como podria hacer esto????? lo hice asi:

public function validarAction()
{
$param= $this->_request->getPost();
$form = new Default_Form_Formulario();
if ($this->getRequest()->isPost()) {
if ($form->isValid($_POST)) {
$boton1 = $_POST["buscar"];
$boton2 = $_POST["enviar"];
if(!empty($boton1)) {
$parametros= $this->_request->getPost();
$form = new Default_Form_Formulario();
if ($form->isValid($_POST)) {
$id_usuario = $form->getValue('id_usuario');
$buscamodel = new Default_Model_Prueba();
$busca = $buscamodel->find($id_usuario);
$form->populate($busca);
$this->view->form= $form;
}
}
else //boton 2
{
print_r("es el otro boton...");
$this->_redirect(' ./form/recibe');
}
}
}
else {
print_r("formulario iinvalido"); }

}
  #10 (permalink)  
Antiguo 22/10/2009, 08:18
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: Como asignar un boton una action

Usa un forward, con eso pasas el mismo request y no pierdes los datos.

Saludos.
  #11 (permalink)  
Antiguo 22/10/2009, 08:30
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

si pero lo que pasa es q estos datos los tengo q pasar a otro controlador y este tiene otro form.. si m entiendes???? :)
  #12 (permalink)  
Antiguo 22/10/2009, 08:32
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: Como asignar un boton una action

Por eso, si usas un forward no pierdes el request actual ni los datos que tienes que llegan por POST.

Saludos.
  #13 (permalink)  
Antiguo 22/10/2009, 09:44
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Lo estoy probando pero el forward ejecuta una funcion y tiene q estar en el mismo controlador. y mi funcion esta en el otro controlador....
  #14 (permalink)  
Antiguo 22/10/2009, 09:59
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: Como asignar un boton una action

Puedes pasarle otro controller, la firma para el forward es:
Código:
_forward($action, $controller = null, $module = null, array $params = null):
Saludos.
  #15 (permalink)  
Antiguo 22/10/2009, 11:51
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Como asignar un boton una action

GatorV

Podrias colocar el codigo php de como seria un metodo forward y cual es su funcionalidad.

Gracias.
  #16 (permalink)  
Antiguo 22/10/2009, 12:10
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Gracias!!! ya lo probe y funciona..., pero tengo otro problemita en el 2do controlador tengo otra funcion q es guardar.. entonces cuando hago el forward en el primer controlador no me cambia la url y al presionar el boton para guardar m da un error porq la funcion no esta en el primer controlador.. Como resuelvo esto???
  #17 (permalink)  
Antiguo 22/10/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: Como asignar un boton una action

@Fenris
Simplemente mandas llamar $this->forward(/*options*/) dentro de un controller para llamar a otro controller/action dentro del mismo action.

@tsar
En ese caso puedes guardar los datos en una sesión y hacer un redirect para cambiar la URL a la segunda y luego rescatar los datos de la sesión.

Saludos.
  #18 (permalink)  
Antiguo 22/10/2009, 14:32
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Gracias!!! Lo probaré y comento.. :)
  #19 (permalink)  
Antiguo 23/10/2009, 13:41
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Hola tengo un problema... tengo 2 botones y cada uno hace una accion distinta lo hice asi....

public function validarAction()
{
$param= $this->_request->getPost();
$form = new Default_Form_Formulario();
if ($form->isValid($_POST)) {
$boton1 = $_POST["buscar"];
$boton2 = $_POST["guardar"];
if(!empty($boton1)) {
$id_usuario = $form->getValue('id_usuario');
$buscamodel = new Default_Model_Prueba();
$busca = $buscamodel->find($id_usuario);
$form->populate($busca);
$this->view->form= $form;
}

else {// el boton 2 guardar
$param = $this->_request->getPost();
$form = new Default_Form_Prueba();

if ($form->isValid($_POST))
{
$model = new Default_Model_Prueba($form->getValues());
$model->save();
}
else
{
print_r("NO paso");
}
}

yo quiero buscar el registro si existe lo monto despues si quiere modificar un dato pues hacerlo y despues darle guardar; pero si yo busco y despues modifico al guardar m da un error por q la url m monta d nuevo la direccion de la funcion...
no existe una forma q no sea con las variables de session como dice GatorV para hacer esto??? ya que esto esta en el mismo controlador.. ¿Entonces no puedo tener mas d una accion en el controlador?
  #20 (permalink)  
Antiguo 24/10/2009, 11:27
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: Como asignar un boton una action

Zend_Form tiene un método setAction que te permite apuntar la acción a donde vas a apuntar tu formulario.

Saludos.
  #21 (permalink)  
Antiguo 26/10/2009, 06:34
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Exacto GatorV; yo tengo en mi formulario esto:
$this->setMethod('post');
$this->setAction('./formulario/validar');
Pero con esto solo asigno una accion y es la q ejecuta;como asigno las demas??... porq hice la funcion validar dond preguntara por el boton pero como comente anteriormente no puede hacer 2 acciones... :(
  #22 (permalink)  
Antiguo 26/10/2009, 07:36
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: Como asignar un boton una action

Pues en ese caso como ya te habian comentado usa forward para ejecutar otra acción al seleccionar el otro botón.

Si quieres cambiar toda la URL y usar redirect vas a tener que usar variables de sesión para transportar los datos de $_POST y no perderlos.

Saludos.
  #23 (permalink)  
Antiguo 26/10/2009, 08:06
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Pues con el forward igual no funciona, sigue montando en la url otra ves la direccion completa.. Es q no entiendo algo ¿¿porq si estas acciones estan en el mismo controlador, las debo hacer con variables de session??? no hay una forma de asignarlas directament!! disculpa la insistencia pero es q en otros framework esto se puede hacer, por lo menos yo lo hice en otro framework... !!! :)
  #24 (permalink)  
Antiguo 26/10/2009, 08: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: Como asignar un boton una action

Esque no entiendo realmente cual es tu problema con usar forward, para eso existe y es para lo que debe de usarse, para llamar a otra acción en el mismo u otro controlador como parte del request actual.

La teoria es, seleccionas el botón dos, validas que es el segundo botón en tu controlador, y haces un forward a la acción/controller que quieras usar y pasas el request actual como parte de las opciones (si ves el 4to parámetro para forward son los parámetros) y ejecutas esa acción, si tu vas a ejecutar otra acción podrías hacer:

Código PHP:
Ver original
  1. $this->_forward('otheraction', null, null, $request->getPost());

Saludos.
  #25 (permalink)  
Antiguo 26/10/2009, 08:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como asignar un boton una action

Pues no c q estoy haciendo mal... t muestro TODO lo q tengo

Esto es lo q tengo en el form

$this->setMethod('post');
$this->setAction('./formulario/validar');
.
.
.
$this->addElement('submit', 'buscar', array(
'ignore' => true,
'label' => 'Buscar',
'decorators' => $buttonDecorators,

));

$this->addElement('submit', 'modificar', array(
'ignore' => true,
'label' => 'Modificar',
'decorators' => $buttonDecorators,

));

En el controlador esto;

public function validarAction()
{
$param= $this->_request->getPost();
$form = new Default_Form_Formulario();
if ($form->isValid($_POST)) {
$boton1 = $_POST['buscar'];
$boton2 = $_POST['modificar'];
if(!empty($boton1)) {
$id_usuario = $form->getValue('id_usuario');
$buscamodel = new Default_Model_Prueba();
$busca = $buscamodel->find($id_usuario);
$form->populate($busca);
$this->view->form= $form;
}
else
if (!empty ($boton2)) // boton 2
{
// $this->_forward('accion');
$this->_forward('modificar', $param);
}
}
else //El formulario es invalido
{
print_r("no paso");
}

}

public function modificarAction()
{
$param= $this->_request->getPost();
$form = new Default_Form_Formulario();
$idusuario = $form->getValue('idusuario');
$busqueda = new Default_Model_Prueba();
$busca = $busqueda->find($idusuario);
if (!($busca == null)) {
$busqueda->update($idusuario);
echo ('Modificado Exitosamente');
}
}
}

Si puedes echarl un vistaso y m dice donde estoy haciendo la cosas mal t lo agradeceria.... :)
  #26 (permalink)  
Antiguo 26/10/2009, 09:02
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: Como asignar un boton una action

Como te comente más arriba, tienes un problema al usar _forward revisa los parámetros y el orden de como los debes de enviar.

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 23:14.