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


7

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

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

私は同じことをやろうとしています、$ form配列をコールバック関数に渡します。このコードから、引数は使用可能であるように見えますが、コールバックが呼び出されたとき、$ form引数は空のように見えます。function my_ajax_cb($form, $form_state) { dpm($form);
2017

3

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();

}

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


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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.