web-dev-qa-db-ja.com

追加の引数/パラメーターをajaxコールバック関数に追加するにはどうすればよいですか?

drupal 7.を使用しています。ajaxコールバック関数に引数を追加する必要があります。フォームに5つのフィールドセットがあり、それらすべてに同じ要素があり、IDだけが例:group-1group-2...含める必要があります1,2,3..コールバック関数の引数としての部分。そうしないと、変更が必要なフィールドセット要素を予測するロジックを構築するのが複雑になります。

たとえば、そのような実装は可能ですか?

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

すでに尋ねられたこの質問 ここ 。しかし、私はそれらの答えが上記の私のニーズに合わない。ありがとうございました。

7
Bora Semiz

Drupalにはそのためのメカニズムがありません。リンク先の投稿で述べたように、そのデータをJavaScriptに渡してPHPに戻す必要はありません。次の形式にしてください。

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

AjaxCallbackにデータを渡すには、次のようにします。

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

配列にカスタム属性を追加します:#data

次に、コールバックで:

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

}

トリガー要素から動的な値を取得します。

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