Làm cách nào để sử dụng gửi lại cuộc gọi trên biểu mẫu cài đặt quản trị viên Drupal?


14

Tôi đang sử dụng mã này để tạo mẫu quản trị viên của mình:

function custom_orders_admin(){
  $form = array();

  $form['custom_ignore_terms']['ignore_terms'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Don\'t display these'),
    '#default_value' => variable_get('custom_ignore_terms', array()),
    '#options' => drupal_map_assoc($termTypes),
    '#description' => t("Choose the terms you do not want displayed."),
    '#required' => FALSE,
  );

  return system_settings_form($form);
}

Nhưng tôi nhận thấy rằng nếu tôi làm điều này:

function custom_orders_admin_submit($form, &$form_state) {
  exit(var_dump($form_state));
}

Tôi không thể thoát ra. Tôi đoán điều này là do system_settings_form()chăm sóc trình. Làm thế nào để tôi lấy lại quyền kiểm soát? Tôi cần thực hiện một số xử lý tùy chỉnh trong trình xử lý _submit đó ...


Tôi đã thử thêm một '#submit'tài sản vào $formnhưng điều đó cũng không giúp được gì.
MP Aditya

3
Uh oh, xin lỗi rằng thực sự đã làm việc! Tôi đã làm $form['#submit'] = array('custom_food_orders_admin_submit');và bây giờ nó hoạt động. Cảm ơn bạn!
MP Aditya

Câu trả lời:


30

Trình xử lý đệ trình mặc định $form_id . '_submit'chỉ kích hoạt nếu không có trình xử lý trình nào khác được đặt.

Vì system_sinstall_form () thiết lập trình xử lý gửi, trình xử lý mặc định không kích hoạt, do đó bạn phải chỉ định nó nếu bạn muốn sử dụng nó.

Bạn có thể làm như vậy:

/**
 * A custom form.
 */
function custom_form() {
  $form = array();

  $form['custom_form_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Custom form field'),
    '#default_value' => variable_get('custom_form_field', ''),
  );

  // Set a submit handler manually because the default submit handler
  // gets overridden by the system_settings_form() submit handler.
  $form['#submit'][] = 'custom_form_submit';

  return system_settings_form($form);
}

/**
 * Submit handler for the custom form.
 */
function custom_form_submit($form, &$form_state) {
  // Submit code here.
}

Thêm trình xử lý gửi của bạn như thế này có nghĩa là trình xử lý của bạn sẽ chạy trước trình xử lý trình system_sinstall_form ().

Nếu bạn muốn của bạn chạy sau, thay vì:

// Set a submit handler manually because the default submit handler
// gets overridden by the system_settings_form() submit handler.
$form['#submit'][] = 'custom_form_submit';

return system_settings_form($form);

Làm:

$form = system_settings_form($form);
$form['#submit'][] = 'custom_form_submit';
return $form;

Đảm bảo không làm điều này mặc dù:

$form = system_settings_form($form);
$form['#submit'] = array('custom_form_submit');
return $form;

bởi vì điều đó sẽ ghi đè trình xử lý trình system_sttings_form (), điều này sẽ đánh bại mục đích sử dụng hàm system_sinstall_form () ở vị trí đầu tiên.

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.