Comment utiliser un rappel de soumission sur un formulaire de paramètres d'administration Drupal?

14

J'utilise ce code pour créer mon formulaire d'administration:

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

Mais je remarque que si je fais cela:

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

Je ne peux pas sortir. Je suppose que c'est parce que system_settings_form()prend soin de soumettre. Comment retrouver le contrôle? J'ai besoin de faire un traitement personnalisé dans ce gestionnaire _submit ...

Aditya MP
la source
J'ai essayé d'ajouter une '#submit'propriété à $formmais cela n'a pas aidé non plus.
Aditya MP
3
Oh oh, désolé, ça a vraiment fonctionné! Je l'ai fait $form['#submit'] = array('custom_food_orders_admin_submit');et maintenant ça marche. Je vous remercie!
Aditya MP

Réponses:

30

Le gestionnaire de soumission par défaut $form_id . '_submit'ne se déclenche que si aucun autre gestionnaire de soumission n'a été défini.

Étant donné que system_settings_form () définit un gestionnaire de soumission, le gestionnaire par défaut ne se déclenche pas, vous devez donc le spécifier si vous souhaitez l'utiliser.

Vous pouvez le faire comme ceci:

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

L'ajout de votre gestionnaire de soumission comme ceci signifie que le vôtre s'exécutera avant le gestionnaire de soumission system_settings_form ().

Si vous souhaitez que le vôtre s'exécute après, au lieu de:

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

Faire:

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

Assurez-vous cependant de ne pas le faire:

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

car cela écraserait le gestionnaire de soumission system_sttings_form (), ce qui irait à l'encontre du but d'utiliser la fonction system_settings_form () en premier lieu.

rooby
la source