web-dev-qa-db-fra.com

Comment ajouter des arguments / paramètres supplémentaires à la fonction de rappel ajax?

J'utilise drupal 7. J'ai besoin d'ajouter des arguments supplémentaires à ma fonction de rappel ajax. J'ai cinq ensembles de champs dans mon formulaire, et dans tous les mêmes il y a les mêmes éléments, juste leurs ID sont différent. Par exemple; group-1, group-2... Je dois inclure cela 1,2,3.. partie dans la fonction de rappel comme arguments. Sinon, il sera trop compliqué de construire une logique pour prédire quel élément de champ doit changer.

Par exemple, une telle implémentation est-elle possible?

function mymodule_form($form, $form_state) {
    $group = 1;

    // Some form elements...

    $form['button'] = array(
        '#type' => 'button',
        '#ajax' => array(
            'callback' => 'my_callback_function',
            'wrapper' => 'my_target_area',
            'arguments' => array($group1, ...) // Is such a thing possible or another way? 
        ),
    );
}

function my_callback_function($args, $form, $form_state) {
    $arguments = $args;
    return $form['my_target_area'];
}

Cette question a déjà été posée ici . Mais je ces réponses ne correspondent pas à mes besoins mentionnés ci-dessus. Je vous remercie.

7
Bora Semiz

Drupal n'a pas de mécanisme pour le faire, non. Comme mentionné dans le message auquel vous avez lié, il n'est pas nécessaire de transmettre ces données à Javascript, puis de revenir à PHP cependant - conservez-les simplement sous la forme:

function mymodule_form($form, $form_state) {
  $form['button'] = array(
    '#type' => 'button',
    '#ajax' => array(
      'callback' => 'my_callback_function',
      'wrapper' => 'my_target_area',
    ),
  );

  $form['#foo'] = array($group1, ...);

}

function my_callback_function($form, $form_state) {
  $arguments = $form['#foo'];
  return $form['my_target_area'];
}
6
Clive

Pour passer des données à ajaxCallback, voici comment je fais:

$form['repas'][$i]['detail']['midi']['mois_midi_'.$i] = [
              '#type' => 'select',
              '#title' => $this->t('Mois'),
              '#data'=>$i,
              '#options'=>array(
                  ''=>'Tous',
                  '01'=>'Janvier',
                  '02'=>'Février',
                  '03'=>'Mars',
                  '04'=>'Avril',
                  '05'=>'Mai',
                  '06'=>'Juin',
                  '07'=>'Juillet',
                  '08'=>'Aout',
                  '09'=>'Septembre',
                  '10'=>'Octobre',
                  '11'=>'Novembre',
                  '12'=>'Décembre',

              ),
              '#ajax'   => [
                  'event' => 'change',
                  'effet'=>'fade',
                  'wrapper'=>'legumes'.$i,
                  'method'=>'replace',
                  'callback' => array($this,'changeLegumeCallback'),
              ],
              '#default_value'=>$mois,
          ];

j'ajoute un attribut personnalisé à mon tableau: #data

Puis dans le rappel:

public function changeLegumeCallback(array &$form, FormStateInterface $form_state){
    echo $form_state->getTriggeringElement()['#data'];
    exit();

}

Vous obtiendrez votre valeur dynamique de l'élément déclencheur.

3
Kevin
$form["action"] = [
  "#type" => "button",
  "#value" => "Retirer",
  "#arg" => $id,
  "#attributes" => ["class" => ["button button--small"]],
  "#ajax" => [
    "callback" => [$this,"remove_chiffre_item"],
    "event" => "click",   
    "progress" => [],
  ],
];

public function remove_chiffre_item(array &$form, FormStateInterface $form_state) {

  $element= $form_state->getTriggeringElement()["#arg"]; // $form["action"]["#arg"]
  drupal_set_message($element);
  return $form;
}
0
Ilya webdev