В Drupal form API версии 6, у формы было свойство редиректа (пример из документации Drupal):
1 |
$form['#redirect'] = array('user/login', 'destination=node&foo=bar'); |
которое позволяло перенаправить пользователя после отправки/обработки данных формы. В 7й версии API это свойство исчезло. Что можно предпринять, чтобы получить похожий эффект?
Редирект в 6-й версии выполнял команду внутреннего перехода, для примера выше это соответствовало:
1 |
drupal_goto('user/login', array('destination'=>'node', 'foo' => 'bar')); |
Никто не мешает нам выполнить этот переход в hook_submit формы. Соответствующий обработчик можно добавить в form_hook_alter.
1 2 3 4 5 6 7 |
function MYMODULE_form_FORMNAME_alter(&$form, &$form_state) { $form['#submit'][] = '_redirect_onsubmit'; } function _redirect_onsubmit(&$form, &$form_state) { drupal_goto('user/login'); } |
Проблема этого способа в том, что не будут выполнены последующие обработчики формы onsubmit. Потому второй вариант — это изменить внешнее окружение так, чтобы drupal делал то, что нужно:
1 2 3 |
function _redirect_onsubmit(&$form, &$form_state) { $_GET['destination'] = 'user/login'; } |
Это не помешает выполнится другим зацепкам, но и не помешает другим зацепкам использовать тот же самый трюк с подменой $_GET[‘destination’].
Для 7 должен такой вариант работать:
function _redirect_onsubmit($form, &$form_state) {
$form_state[‘redirect’] = «user/login»;
}