送信時にユーザー作成フォームをホームページにリダイレクトするようにしています。私はコンテンツプロファイルを使用しているため、送信ボタンを共有する2つのフォームです。両方のフォームで#redirect = '/'を設定しても、フォームは常にそれ自体にリダイレクトされます。それは動作し、すべてですが、私が望む方法にリダイレクトしません。
何か案は?
コード:
function mymodule_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'user_register':
$form['#redirect'] = '/';
break;
case 'coordinator_node_form':
$form['#redirect'] = '/';
}
}
_$form['#redirect']
_について考慮すべき2つの事実があります。
$form_state['#redirect']
_は、フォーム送信ハンドラーで設定され、_$form['#redirect']
_よりも優先されます。$form['#redirect']
_および_$form_state['#redirect']
_は、モジュールによって「#action」が設定されているフォームでは無視されます。これが、ユーザーログインフォームで発生することです。$form['#redirect']
_が設定されている場合、_$form_state['#redirect']
_および_$_REQUEST['destination']
_は無視されます。代わりにその値が使用されます。フォームをリダイレクトし、設定したパスに確実にリダイレクトされるようにする場合は、hook_form_alter()
を実装して、_$form_state['#redirect']
_を変更するフォーム送信ハンドラを追加する必要があります。そのフックを実装するモジュールは、そのモジュールの_$form_state['#redirect']
_を変更する他のモジュールの後に実行する必要があります。
これは効果がありませんが、前に挙げた最後の2つのケースでは効果がありません。
掘り下げた結果、ここに答えが見つかりました: http://drupal.org/node/934664
どうやら宛先は#redirectを上書きするので、宛先の設定を解除するだけで機能します。