Wie füge ich der Ajax-Rückruffunktion zusätzliche Argumente / Parameter hinzu?


7

Ich verwende Drupal 7. Ich muss meiner Ajax-Rückruffunktion zusätzliche Argumente hinzufügen. Ich habe fünf Feldsätze in meinem Formular, und in allen gleichen gibt es dieselben Elemente, nur ihre IDs sind unterschiedlich. Zum Beispiel; group-1, group-2... Ich muss diesen 1,2,3..Teil als Argumente in die Rückruffunktion aufnehmen. Andernfalls ist es zu kompliziert, eine Logik zu erstellen, um vorherzusagen, welches Feldsatzelement geändert werden muss.

Ist beispielsweise eine solche Implementierung möglich?

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'];
}

Diese Frage wurde wie schon hier gestellt . Aber ich diese Antworten passen nicht zu meinen oben genannten Bedürfnissen. Vielen Dank.

Antworten:


7

Drupal hat keinen Mechanismus, nein. Wie in dem Beitrag erwähnt, auf den Sie verlinkt haben, müssen diese Daten nicht an Javascript und dann wieder an PHP übergeben werden. Behalten Sie sie einfach in der folgenden Form bei:

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'];
}

Ich versuche das Gleiche zu tun und das $ form-Array an meine Rückruffunktion zu übergeben. Aus diesem Code geht hervor, dass die Argumente verfügbar sind, das Argument $ form jedoch leer ist, wenn der Rückruf aufgerufen wird. function my_ajax_cb($form, $form_state) { dpm($form);
Eiszapfen

3

Um Daten an ajaxCallback zu übergeben, gehe ich folgendermaßen vor:

$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,
          ];

Ich füge meinem Array ein benutzerdefiniertes Attribut hinzu: #data

Dann im Rückruf:

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

}

Sie erhalten Ihren dynamischen Wert vom Triggerelement.


0
$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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.