Drupal hook_form_alter不重定向

时间:2010-08-30 18:47:44

标签: drupal redirect submit

我正在使用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";

}

请帮助尝试满足过期的死线! :(

提前致谢。

3 个答案:

答案 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

我倾向于避免重定向,所以一旦你达到截止日期,我会重构你的代码。你通常可以避免重定向。