Как использовать обратный вызов для отправки в форме настроек администратора 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 ().

rooby
источник