ユーザーがサイドバーのログインブロックからログインした直後にユーザー編集ページにリダイレクトしようとしています。 hook_user_login を実装しましたが、うまくいきませんでした。 drupal_goto()
または$edit['rediect']
は$_GET['destination']
に優先することはできないようです
function mymodule_user_login(&$edit, $account){
if ( user role is employee and user has not completed profile yet ) {
// both failed to redirect, although my condition is true
$edit['redirect'] = 'user/'.$account->uid.'/edit';
drupal_goto('user/'.$account->uid.'/edit');
}
}
ホームページ(mydomain.com)でログインしようとしましたが、フックでexit
を実行すると、URLがmydomain.com/node?destination=nodeに変更されていることがわかりました。サイト情報で私のホームページのパスが空白です。
[編集]
リダイレクトの条件は、ログインしているユーザーが従業員の役割を持ち、彼のプロファイルがまだ完了していない場合です。私のユースケースは this とよく似ていますが、コンテンツプロファイルを使用しません。
$ _GET ['destination']をオーバーライドする方法で問題が解決すると思います。
drupal_goto() が設定されている場合、_$_GET['destination']
_が使用されます。以下は、関数から使用されるコードです。
_ if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
$destination = drupal_parse_url($_GET['destination']);
$path = $destination['path'];
$options['query'] = $destination['query'];
$options['fragment'] = $destination['fragment'];
}
_
hook_user_login()
内に_$edit['redirect']
_を設定しても効果はありません。
あなたにできることは、hook_user_login()
の_$_GET['destination']
_を変更することです。ユーザーが設定したパスに確実にリダイレクトされるようにしたい場合は、モジュールの重みを増やすなどして、フックが最後に実行されるようにする必要があります。
rules
moduleを使用すると、最短の方法があります。 更新:
手順
1- 新しいルールを作成
まず、新しいルールを開始する必要があります。これを行うには、ルール管理センターに移動し、[トリガーされたルール]をクリックして、[新しいルールを追加]タブをクリックします。 「ユーザーがログインしました」というイベントを選択し、「ログイン時にアカウントページにリダイレクトする」というラベルを設定して、「送信」をクリックします。これで、まだ空の新しいルールが作成されました。このルールに追加するすべての条件とアクションは、「ユーザーがログインしました」というイベントで評価されます。
2- 条件を追加条件セクションadd condition
、Select the condition to add
選択PhpExecute Custom php code
(-PHPフィルターがインストールされていることを確認してください)。条件セクションで状態を確認してください。
3- リダイレクトアクションを作成する
これを行うには、「アクションの追加」リンクをクリックし、「システム」セクションで「ページのリダイレクト」アクションを選択して、「次へ」ボタンをクリックします。トークンモジュールがインストールされている場合は、「ページリダイレクト」アクションでトークンの置換を使用できます。これにより、ユーザーのIDをリダイレクトパスに配置できます。そのため、「ユーザーアカウントページにリダイレクトする」アクションを呼び出し、パスuser/[account:uid]を設定します。 Drupalは常に、現在のページに宛先パラメーターを設定するため、ユーザーがログに記録するとリダイレクトが適用されるようにするには、これをアクティブにする必要があります。オプションをオンにして、[保存]ボタンをクリックします。
ログイン先 モジュールも同じ機能を提供していると思います。それとは別に、それはまたいくつかのより多くの機能を提供します。試す価値があります。