Bonjour,
J’ai un formulaire modifié de façon basique avec hook_form_alter, pour introduire un markup modifiable par l’action d’un bouton avec un callback Ajax.
Mon souci est le suivant : la première fois que je clique sur le bouton, le markup prend bien la valeur attendue ; en revanche, si je reclique dessus, il se réinitialise et n’affiche donc plus la bonne valeur ; si je clique une 3e fois, il affiche à nouveau la bonne valeur ! Comment éviter ce toggle ? Ce doit être trivial, mais ça me dépasse…
Voici le code actuel du module maresa.module, qui modifie le formulaire de noeud du type de contenu simple «Reservation» avec un seul champ en plus du titre, le champ field_km.
Merci d’avance pour votre aide.
< ?php
// $Id$
/**
* @file
* Drupal Module : maresa
* Adds custom code specific to this Drupal 7 site.
*/
/**
* Implementation of hook_form_alter().
*/
function maresa_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case ‘reservation_node_form’ :
$form[‘box’] = array(
‘#type’ => ‘markup’,
‘#prefix’ => ‘
’,
‘#suffix’ => ‘
’,
‘#markup’ => ‘
Prix non calculé
’,
) ;
$form['mybtn'] = array(
'#type' => 'button',
'#id' => 'mybtn',
'#ajax' => array(
'callback' => 'maresa_callback',
'wrapper' => 'box',
'name' => 'mybtn1',
),
'#value' => t('Calculer le prix'),
);
break;
}
}
/**
* Select the ‘box’ element, change the markup in it, and return it as a
* renderable array.
*
* @return renderable array (the box element)
*/
function maresa_callback($form, $form_state) {
$element = $form[‘box’] ;
$leskm = $form_state[‘values’][‘field_km’][‘und’][‘0’][‘value’] ;
$prix_calc = $leskm * 35 ;
$element[‘#markup’] = «Le prix pour » . $leskm . » km est de » . $prix_calc . » euros» ;
return $element ;
}
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
