Як використовувати зворотний виклик для подання у формі налаштування адміністратора Drupal?


14

Я використовую цей код, щоб скласти форму адміністратора:

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

Але я помічаю, що якщо я це роблю:

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

Я не можу вийти. Я здогадуюсь це тому, що system_settings_form()піклується про подання. Як повернути контроль? Мені потрібно виконати якусь спеціальну обробку в цьому обробці _submit ...


Я спробував додати '#submit'властивість до, $formале це теж не допомогло.
Адітя МП

3
Ах, вибачте, що насправді спрацювало! Я це зробив $form['#submit'] = array('custom_food_orders_admin_submit');і зараз це працює. Дякую!
Адітя МП

Відповіді:


30

Типовий обробник подачі $form_id . '_submit'запускає лише пожежі, якщо не встановлено жодних інших обробників подання.

Оскільки system_settings_form () встановлює обробник подачі, обробник за замовчуванням не спрацьовує, тому вам потрібно вказати його, якщо ви хочете його використовувати.

Ви можете зробити так:

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

Якщо додати цей обробник подачі таким чином, це означає, що ваше запуститься до того, як обробник відправки system_settings_form () подасть.

Якщо ви хочете, щоб ваш запустився після, замість:

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

Зробіть:

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

Не забудьте цього зробити:

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

тому що це перезаписає обробник подання system_sttings_form (), що б перешкоджало використанню функції system_settings_form () в першу чергу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.