我正在使用hook form_alter并设置$ form ['#redirect'] ='dir1 / dir2 / mypage'。但表格拒绝去那里。
表单似乎不起作用,但不断发送回原始表单而不是重定向。
我要更改的表单来自root用户模块。
mymodule_form_alter( ){
... code...
$form['account']['pass'] = array(
'#type' => 'password_confirm',
'#size' => 25, '#description' => t(''),
'#required' => TRUE
);
unset($form['Birthdate']['profile_birthdate']);
unset($form['Birthdate']);
unset($form['#action']);
$form['#validate'] = array('_mymodule_school_registration_validate');
$form['#submit'] = array( '_mymodule_school_registration_submit');
$form['#redirect']= "dir1/dir2/mypage";
}
请帮助尝试满足过期的死线! :(
提前致谢。
答案 0 :(得分:1)
您的hook_form_alter()
实施不正确:
$form['#submit']
和$form['#validate']
已经是包含内容的数组,因此您不应该使用array()
重置它们,$form['#action']
会导致表单在提交时不执行任何操作,$form['#redirect']
中设置hook_form_alter()
将被其他处理程序覆盖,并且hook_form_alter()
实施会影响(并打破)每个表单。更多信息:Forms API Reference
相反,请尝试以下方法:
function mymodule_form_alter(&$form, $form_state, $form_id) {
if ($form_id === 'form_id_goes_here') {
// Code here
$form['account']['pass'] = array(
'#type' => 'password_confirm',
'#size' => 25,
'#description' => t(''),
'#required' => TRUE
);
unset($form['Birthdate']['profile_birthdate']);
unset($form['Birthdate']);
$form['#validate'][] = '_mymodule_school_registration_validate';
$form['#submit'][] = '_mymodule_school_registration_submit';
}
}
function _mymodule_school_registration_submit($form, &$form_state) {
// Code here
$form_state['redirect'] = 'dir1/dir2/mypage';
}
答案 1 :(得分:0)
尝试
$form_state['redirect'] = "dir1/dir2/mypage";
答案 2 :(得分:-1)
如果您的提交只有一个处理程序,则可以轻松地使用
重定向
function _mymodule_school_registration_submit(..args...) {
...
drupal_goto('somewhere');
}
我认为功能是一样的。
http://api.drupal.org/api/function/drupal_goto/6
我倾向于避免重定向,所以一旦你达到截止日期,我会重构你的代码。你通常可以避免重定向。