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()
s'occupe de la soumission. Comment retrouver le contrôle? J'ai besoin de faire un traitement personnalisé dans ce gestionnaire _submit ...
Le gestionnaire d'envoi par défaut de $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 soit exécuté 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.