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

[CakePHP] Formularios con Ajax

Estas en el tema de [CakePHP] Formularios con Ajax en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Estoy liado con CakePHP y un sistema de encuestas. De momento lo tengo todo bien montado. Se vota y una vez hecho esto te ...
  #1 (permalink)  
Antiguo 26/01/2009, 13:21
 
Fecha de Ingreso: noviembre-2005
Ubicación: /dev/null
Mensajes: 23
Antigüedad: 18 años, 4 meses
Puntos: 0
[CakePHP] Formularios con Ajax

Buenas,

Estoy liado con CakePHP y un sistema de encuestas. De momento lo tengo todo bien montado. Se vota y una vez hecho esto te recarga el form eliminandolo y poniendo en su lugar un text que dice: Su voto ha sido guardado.

Lo que yo quiero ahora es que al votar salgan los resultados y no me sirve hacer la consulta siempre y meterla en un div, ya que son muchos datos y no siempre se van a mostrar -ya que no siempre se va a votar.

Me gustaría saber que podría hacer, si hay posibilidad de llamar a una función PHP o algun controlador o algo.

Os pego el codigo:
Código PHP:
<h2><span>Encuesta</span></h2>
  <fieldset>
    <p>Después de la Premier League, ¿Qué Liga te gusta más?</p>
    <div id="results" <?php if(!$voted) echo "style='display: none'"?>>
      Resultados encuestas.
    </div>
    <div id="loading" style="display: none;">
           <?php echo $html->image("loading.gif", array("alt"=>"Loading")); ?>
        Cargando...
    </div>
    <div id="refreshArea" <?php if($voted) echo "style=' display: none'"?>>
      <input type="hidden" value="Ligas" name="data[Poll][title]" />
      <?php
        
echo $form->input('vote', array("type" => "radio",
                        
"legend" => false,
                        
"options" => array(=> "Bundesliga",
                              
=> "Francesa",
                              
=> "Calcio",
                              
=> "Argentina",
                              
=> "Otras Ligas")));
      
?>
      <?php echo $ajax->submit('Votar', array('div' => false'url' =>"/polls/add/"'indicator' =>'loading''loading' => 'Element.hide("refreshArea")''complete' => 'Effect.Appear("results")'));
      
?>
    </div>
  </fieldset>
<?php echo $form->end(); ?>
  #2 (permalink)  
Antiguo 26/01/2009, 16:08
 
Fecha de Ingreso: octubre-2005
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: [CakePHP] Formularios con Ajax

Me ha costado un poco entender qué es lo que quieres porque a la vista del código que presentas ya casi lo tienes.
Lo haces casi todo excepto una cosa. El último paso de tu proceso es mostrar la capa results, que por defecto esta oculta, pasando el parámetro 'loading' => 'Element.hide("refreshArea")' al $ajax->submit .
La idea es que cuando utilizas el helper $ajax hagas una actualización del contenido de un elemento. ¿Cómo índicas que elemento quieres actualizar? Pasandole a $ajax->submit en el parámetro $options el valor 'update' => 'idDelElemento'. Esto vale para casi todos los métodos del helper $ajax. Vamos, que quedaría tal que así:
Código PHP:
<?php echo $ajax->submit('Votar', array('div' => false'url' =>"/polls/add/"'update' => 'results''indicator' =>'loading''loading' => 'Element.hide("refreshArea")''complete' => 'Effect.Appear("results")'));
Si la capa results no tuviese contenido no sería necesario que estuviese oculta de primeras y así luego no habría que hacerla aparecer.

Vale, y ahora, ¿cómo rellenas el contenido de results? La llamada a /polls/add/ genera una llamada a un view. Lo que tienes que hacer es, en el método add del controlador polls, las consultas necesarias para obtener los datos que quieres y luego renderizar una vista (no tiene porque ser la de [I]/polls/add[I]) indicando que el método de renderizado es ajax.

El método add del controlador polls quedaría más o menos así:
Código PHP:
public function add($id null){
    
// ...
    // las operaciones de añadir el voto
    // ...
    
    // Haces las consultas para obtener los resultados de la encuesta
    // ...

    // y luego seteas el valor
    
$this->set('resultados'$resultadosDeLaEncuesta);

    
// Renderizas la vista 'add' a través de ajax
    
$this->render('add''ajax');

Básicamente lo más importante de todo esto es el hecho de usar el parámetro 'update' en el helper ajax.
Échale un ojo al capítulo de la guía oficial http://book.cakephp.org/view/208/AJAX y no te limites a copiar lo que yo te he puesto aquí porque además de estar incompleto puede que tenga errores.
Mírate también el API: http://api.cakephp.org/1.2/class_ajax_helper.html

Un saludo.
  #3 (permalink)  
Antiguo 27/01/2009, 18:35
 
Fecha de Ingreso: noviembre-2005
Ubicación: /dev/null
Mensajes: 23
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: [CakePHP] Formularios con Ajax

Muchas gracias, funciona a la perfección ya ;)
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 15:50.