Drupal hook_form_alter Не перенаправляет - PullRequest
1 голос
/ 30 августа 2010

Я использую хук form_alter и устанавливаю $ form ['# redirect'] = 'dir1 / dir2 / mypage'.Но форма отказывается идти туда.

Форма, кажется, работает иначе, но продолжает отправлять обратно в исходную форму вместо перенаправления.

Форма, которую я изменяю, из корневого пользовательского модуля,</p> <pre>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 ]

1 голос
/ 31 августа 2010

Ваша hook_form_alter() реализация неверна:

  • Без параметров вы ничего не изменяете, поэтому ни одно из ваших изменений не будет зарегистрировано,
  • $form['#submit'] и $form['#validate'] уже являются массивами с содержимым, поэтому не следует сбрасывать их с помощью array(),
  • unsetting $form['#action'] заставляет форму ничего не делать при отправке,
  • установка $form['#redirect'] в hook_form_alter() будет переопределена другими обработчиками, а
  • Ваша реализация hook_form_alter() будет влиять (и разрушать) каждую форму.

Дополнительная информация: Справочник по API форм

Вместо этого попробуйте следующее:

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';
}
0 голосов
/ 31 августа 2010

Если у вас есть только один обработчик для отправки, вы можете легко перенаправить с помощью

function _mymodule_school_registration_submit(..args...) {<br> ...<br> drupal_goto('somewhere');<br> }

Я думаю, что функциональность такая же.

http://api.drupal.org/api/function/drupal_goto/6

Я стараюсь избегать перенаправлений, поэтому, как только вы уложитесь в срок, я проведу рефакторинг вашего кода.Обычно вы можете избежать перенаправления.

0 голосов
/ 30 августа 2010

Попробуйте

$form_state['redirect'] = "dir1/dir2/mypage";
...