Pregunta:
Usando hook_form_alter
, ¿cómo puedo redirigir a un usuario a una página personalizada después de crear o editar un nodo en lugar del nodo que se creó o editó?
El código actual para hook_form_alter()
es el siguiente:
function custom_form_alter(&$form, &$form_state, $form_id) {
if ($form['#id'] == 'custom-node-form') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
}
}
Respuesta:
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form['#node']->type == 'custom') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
$form['#submit'][] = 'custom_node_submit';
}
}
function custom_node_submit($form, &$form_state) {
$form_state['redirect'] = 'choose/your/path';
}
El código redirige el formulario independientemente del botón en el que se hizo clic para enviar el formulario. Si desea redirigir un formulario solo cuando se hace clic en un botón de envío específico, debe usar el siguiente código.
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form['#node']->type == 'custom') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
$form['actions']['submit']['#submit'][] = 'custom_node_submit';
}
}
function custom_node_submit($form, &$form_state) {
$form_state['redirect'] = 'choose/your/path';
}
- El ID del formulario no contiene guiones. El ID del formulario es el nombre de la función PHP que genera el formulario (también conocido como el constructor de formularios), y una función PHP no puede contener guiones en su nombre.
- El ID del formulario se pasa a las implementaciones dehook_form_alter () , hook_form_BASE_FORM_ID_alter () y hook_form_FORM_ID_alter () .
hook_form_FORM_ID_alter()
realmente no lo necesita, ya que se llama para un formulario específico, mientras que los otros dos ganchos se invocan para más de un formulario. - La primera función es la implementación de hook_form_BASE_FORM_ID_alter () ; en este caso, el ID del formulario base es "node_form" que es el formulario base para el formulario de edición del nodo.
- El formulario de edición de nodo contiene
$form['#node']
, que es el objeto de nodo para el objeto que se está editando; "personalizado" es el ID corto para el tipo de contenido que desea redirigir a los usuarios una vez que editan un nodo. - La alteración de
$form_state['redirect']
dehook_form_alter()
no tiene ningún efecto; debe configurarse desde un controlador de envío.