Pregunta:
Estoy usando este código para hacer mi formulario de administrador:
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);
}
Pero noto que si hago esto:
function custom_orders_admin_submit($form, &$form_state) {
exit(var_dump($form_state));
}
No puedo salir. Supongo que esto se debe a que system_settings_form()
se encarga de enviar. ¿Cómo recupero el control? Necesito hacer un procesamiento personalizado en ese controlador _submit …
Respuesta:
El controlador de envío predeterminado de $form_id . '_submit'
solo se $form_id . '_submit'
si no se han configurado otros controladores de envío.
Debido a que system_settings_form () establece un controlador de envío, el controlador predeterminado no se activa, por lo que debe especificarlo si desea usarlo.
Puedes hacerlo así:
/**
* 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.
}
Agregar su controlador de envío de esta manera significa que el suyo se ejecutará antes que el controlador de envío system_settings_form ().
Si quieres que el tuyo corra después, en lugar 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);
Hacer:
$form = system_settings_form($form);
$form['#submit'][] = 'custom_form_submit';
return $form;
Sin embargo, asegúrese de no hacer esto:
$form = system_settings_form($form);
$form['#submit'] = array('custom_form_submit');
return $form;
porque eso sobreescribiría el manejador de envío system_sttings_form (), lo que anularía el propósito de usar la función system_settings_form () en primer lugar.