Làm cách nào để thêm đối số / tham số bổ sung vào hàm gọi lại ajax?


7

Tôi đang sử dụng drupal 7. Tôi cần thêm các đối số bổ sung cho hàm gọi lại ajax của mình. Tôi có năm trường trong biểu mẫu của mình và trong tất cả chúng đều có cùng các yếu tố, chỉ cần ID của chúng là khác nhau. Ví dụ; group-1, group-2... Tôi cần đưa 1,2,3..phần đó vào hàm gọi lại làm đối số. Mặt khác, sẽ quá phức tạp để xây dựng một logic để dự đoán phần tử fieldset nào cần thay đổi.

Ví dụ, như một thực hiện có thể?

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

Câu hỏi này như đã được hỏi ở đây . Nhưng tôi những câu trả lời không phù hợp với nhu cầu của tôi được đề cập ở trên. Cảm ơn bạn.

Câu trả lời:


7

Drupal không có cơ chế để làm điều đó, không. Như đã đề cập trong bài đăng mà bạn đã liên kết, không cần phải chuyển dữ liệu đó sang Javascript và sau đó quay lại PHP - chỉ cần giữ nó ở dạng:

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

Tôi đang cố gắng làm điều tương tự, chuyển mảng $ form cho hàm gọi lại của tôi. Từ mã này, nó xuất hiện các đối số có sẵn, nhưng đối số $ form xuất hiện trống khi gọi lại được gọi. function my_ajax_cb($form, $form_state) { dpm($form);
icicleking

3

Để truyền dữ liệu cho ajaxCallback, đây là cách tôi làm:

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

tôi thêm một thuộc tính tùy chỉnh vào mảng của tôi: #data

Sau đó, trong cuộc gọi lại:

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

}

Bạn sẽ nhận được giá trị động của mình từ Phần tử kích hoạt.


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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.