Come posso utilizzare un callback di invio su un modulo delle impostazioni dell'amministratore di Drupal?


14

Sto usando questo codice per creare il mio modulo di amministrazione:

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

Ma noto che se lo faccio:

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

Non posso uscire. Immagino che sia perché system_settings_form()si occupa di inviare. Come posso ottenere il controllo? Ho bisogno di fare un po 'di elaborazione personalizzata in quel gestore _submit ...


Ho provato ad aggiungere una '#submit'proprietà a $formma neanche questo mi ha aiutato.
Aditya MP

3
Uh oh, scusa se ha funzionato davvero! L'ho fatto $form['#submit'] = array('custom_food_orders_admin_submit');e ora funziona. Grazie!
MP Aditya,

Risposte:


30

Il gestore di invio predefinito si attiva $form_id . '_submit'solo se non sono stati impostati altri gestori di invio.

Poiché system_settings_form () imposta un gestore di invio, il gestore predefinito non si attiva, quindi è necessario specificarlo se si desidera utilizzarlo.

Puoi farlo in questo modo:

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

Se aggiungi il gestore di invio in questo modo, il tuo verrà eseguito prima del gestore di invio system_settings_form ().

Se vuoi che il tuo corra dietro, invece di:

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

Fare:

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

Assicurati di non farlo però:

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

perché ciò sovrascriverebbe il gestore di system_sttings_form (), che in primo luogo vanificherebbe lo scopo di utilizzare la funzione system_settings_form ().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.