Jak korzystać z funkcji oddzwaniania w formularzu ustawień administratora Drupal?

14

Używam tego kodu, aby utworzyć formularz administratora:

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

Ale zauważam, że jeśli to zrobię:

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

Nie mogę wyjść. Zgaduję, że system_settings_form()dzieje się tak, ponieważ dba o przesłanie. Jak odzyskać kontrolę? Muszę wykonać niestandardowe przetwarzanie w tym module obsługi _submit ...

Aditya MP
źródło
Próbowałem dodać '#submit'właściwość, $formale to też nie pomogło.
Aditya, poseł
3
Przepraszam, że tak naprawdę działało! Zrobiłem $form['#submit'] = array('custom_food_orders_admin_submit');i teraz działa. Dziękuję Ci!
Aditya, poseł

Odpowiedzi:

30

Domyślny moduł obsługi przesyłania $form_id . '_submit'tylko odpala, jeśli nie ustawiono innych modułów obsługi przesyłania.

Ponieważ system_settings_form () ustawia moduł obsługi przesyłania, domyślny moduł obsługi nie jest uruchamiany, dlatego należy go określić, aby go użyć.

Możesz to zrobić w następujący sposób:

/**
 * 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.
}

Dodanie procedury obsługi przesyłania w ten sposób oznacza, że ​​będzie ona działać przed procedurą obsługi przesyłania system_settings_form ().

Jeśli chcesz, aby Twój działał później, zamiast:

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

Robić:

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

Pamiętaj jednak, aby tego nie robić:

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

ponieważ to nadpisze procedurę obsługi system_sttings_form (), co zniweczy cel wykorzystania funkcji system_settings_form ().

dureń
źródło