Submitted by bender on
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+
Pas très renseigné sur ce
Permalien Soumis par Numerizen le 29 Août, 2011 - 18:01
Pas très renseigné sur ce sujet sous D6, mais voici un lien qui pourrait être intéressant :
http://randyfay.com/ahah
et une partie de la doc de l'API :
http://api.drupal.org/api/examples/ahah_example--ahah_example.module/6