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';
}
Код перенаправляет форму независимо от нажатой кнопки, чтобы отправить форму. Если вы хотите перенаправить форму только при нажатии определенной кнопки отправки, вам следует использовать следующий код.
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';
}
- Идентификатор формы не содержит дефисов. Идентификатор формы - это имя функции PHP, которая генерирует форму (или построитель форм), и функция PHP не может содержать дефисов в своем имени.
- Идентификатор формы передается реализациям hook_form_alter () , hook_form_BASE_FORM_ID_alter () и hook_form_FORM_ID_alter () .
hook_form_FORM_ID_alter()
в действительности это не нужно, так как он вызывается для конкретной формы, в то время как два других хука вызываются для более чем одной формы.
- Первая функция - это реализация hook_form_BASE_FORM_ID_alter () ; в этом случае базовым идентификатором формы является «node_form», которая является базовой формой для формы редактирования узла.
- Форма редактирования узла содержит
$form['#node']
, который является объектом узла для редактируемого объекта; «custom» - это короткий идентификатор типа контента, который вы хотите перенаправить пользователям, когда они редактируют узел.
- Изменение
$form_state['redirect']
от hook_form_alter()
не имеет никакого эффекта; это должно быть установлено из обработчика представления.