[Résolu] Cherche l'équivalent de 'ahah_bindings' pour drupal 6

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Salut,

Comment générer 2 forms ou plus avec ahah à partir d'un seul $form ?

J'ai vu ici : http://drupal.org/project/ahah_forms que l'argument '#ahah_bindings' permet de définir plusieurs actions ahah sur le même $form. Le problème est que ceci était bon pour Drupal 5 mais sur Drupal 6 cela ne marche pas. Il est pourtant stipulé que cette fonctionnalité est directement intégrée à Drupal 6. Ma question est comment avoir l'équivalent de '#ahah_bindings' dans Drupal 6 ?

Voici mon code :

function reservations_form() {
  $form = array();
 
  //on recupere la liste des salles
  $nom_salle_array = array();
  $result = db_query('SELECT n.ids, n.nom FROM {reserv_nom_salle} n WHERE type="Devoir"');
  while ($record = db_fetch_object($result)) {
      $nom_salle_array[$record->ids] = $record->nom;
  }

    $form['type_salle'] = array(
    '#type' => 'radios',
    '#title' => t('Type de salle'),
    '#options' => array(
      'Devoir' => ('Devoir'),
      'Prestation' => ('Prestation'),
      ),
    '#default_value' => 'Devoir',
    '#ahah_bindings' => array(
      array(
        'event' => 'click',
       'path' => 'reservations/reserv/option/js',
       'wrapper' => 'option-reserv-salle',
       'method' => 'replace',
       ),
      array(
        'event' => 'change',
       'path' => 'reservations/reserv/salle/js',
       'wrapper' => 'list-salle-reserv',
       'method' => 'replace',
       ),
       ),
  );
       
     $form['salle'] = array(
    '#type' => 'select',
    '#title' => t('Salle'),
    '#options' => $nom_salle_array,
    '#prefix' => '<div id="list-salle-reserv">',
    '#suffix' => '</div>',
  );
   
     $form['effectif'] = array(
    '#type' => 'textfield',
    '#title' => t('Effectif'),
    '#default_value' => variable_get('effectif', ''),
    '#size' => 2,
    '#maxlength' => 2,
    '#required' => TRUE,
  );
    
     $form['option-reserv-salle'] = array(
      '#value' => '<div id="option-reserv-salle"></div>',
      );

  return $form;
}

function reservations_menu(){
$items = array();

$items['reservations/reserv/option/js'] = array(
'title' => 'Affiche les checkboxes',
'description' => 'Affiche les checkboxes si les salles sont de type "Prestation"',
'page callback' => 'reservations_change_option_reserv',
'access callback' => TRUE,
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);

$items['reservations/reserv/salle/js'] = array(
'title' => 'Change la liste des salles',
'description' => 'change la liste des salles en fonction du type de salle selectioné',
'page callback' => 'reservations_change_salle_reserv',
'access callback' => TRUE,
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);

return $items;
}

function reservations_change_option_reserv(){
  
   if($_POST['type_salle'] == 'Devoir'){
  
     $output = '';
   }
   elseif($_POST['type_salle'] == 'Prestation'){
   
      //on recupere la liste des prestation
  $nom_prestation_array = array();
  $result = db_query('SELECT n.idp, n.nom FROM {reserv_list_prestation} n');
  while ($record = db_fetch_object($result)) {
      $nom_prestation_array[$record->idp] = $record->nom;
  }
    //on affiche les checkbox des prestation
    $form['la_zone_ajout_salle']['option_reserv_salle'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Prestation'),
    '#options' => $nom_prestation_array,
    '#prefix' => '<div id="option-reserv-salle">',
    '#suffix' => '</div>',
  );
       $output = ahah_render($form, 'option_reserv_salle');
   }
  print drupal_to_js(array('data' => $output, 'status' => true));
}

function reservations_change_salle_reserv(){
  
  //on recupere la liste des salles
  $nom_salle_array = array();
  $result = db_query('SELECT n.ids, n.nom FROM {reserv_nom_salle} n WHERE type="'.$_POST['type_salle'].'"');
  while ($record = db_fetch_object($result)) {
      $nom_salle_array[$record->ids] = $record->nom;
  }
 
     $form['salle'] = array(
    '#type' => 'select',
    '#title' => t('Salle'),
    '#options' => $nom_salle_array,
    '#prefix' => '<div id="list-salle-reserv">',
    '#suffix' => '</div>',
  );
   
    $output = ahah_render($form, 'salle');
   
  print drupal_to_js(array('data' => $output, 'status' => true));
 
}

function ahah_render($fields, $name) {
  $form_state = array('submitted' => FALSE);
  $form_build_id = $_POST['form_build_id'];
  // Add the new element to the stored form. Without adding the element to the
  // form, Drupal is not aware of this new elements existence and will not
  // process it. We retreive the cached form, add the element, and resave.
  $form = form_get_cache($form_build_id, $form_state);
  $form[$name] = $fields;
  form_set_cache($form_build_id, $form, $form_state);
  $form += array(
    '#post' => $_POST,
    '#programmed' => FALSE,
  );
  // Rebuild the form.
  $form = form_builder($_POST['form_id'], $form, $form_state);

// Render the new output.
  $new_form = $form[$name];
  return drupal_render($new_form);
}

Voilà, donc quand je clique sur mon form de type radios rien ne se passe.

Merci d'avance.

a+

Forum :