Wie verwende ich einen Rückruf zum Senden in einem Formular für Drupal-Administratoreinstellungen?

14

Ich verwende diesen Code, um mein Admin-Formular zu erstellen:

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

Aber ich merke das wenn ich das mache:

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

Ich kann nicht verlassen. Ich vermute, das liegt daran, dass es system_settings_form()sich um das Einreichen kümmert. Wie bekomme ich meine Kontrolle zurück? Ich muss eine benutzerdefinierte Verarbeitung in diesem _submit-Handler durchführen ...

Aditya MP
quelle
Ich habe versucht, eine '#submit'Eigenschaft hinzuzufügen , $formaber das hat auch nicht geholfen.
Aditya MP
3
Oh oh, tut mir leid, das hat tatsächlich funktioniert! Ich habe $form['#submit'] = array('custom_food_orders_admin_submit');es getan und jetzt funktioniert es. Vielen Dank!
Aditya MP

Antworten:

30

Der standardmäßige Submit-Handler wird $form_id . '_submit'nur ausgelöst, wenn keine anderen Submit-Handler festgelegt wurden.

Da system_settings_form () einen Submit-Handler festlegt, wird der Standardhandler nicht ausgelöst. Sie müssen ihn daher angeben, wenn Sie ihn verwenden möchten.

Das können Sie so machen:

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

Wenn Sie Ihren Submit-Handler auf diese Weise hinzufügen, wird er vor dem Submit-Handler system_settings_form () ausgeführt.

Wenn Sie möchten, dass Ihre nachher ausgeführt wird, anstatt:

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

Tun:

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

Stellen Sie jedoch sicher, dass Sie dies nicht tun:

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

Dies würde nämlich den Submit-Handler system_sttings_form () überschreiben, der den Zweck der Verwendung der Funktion system_settings_form () zunichte macht.

Dummkopf
quelle