2012-01-03 6 views
0

Drupal 7は、ログインした後、ユーザーがフォームを記入するまで、ユーザーがサイトをクリックするたびに、フォームを含む特定のページにユーザーをリダイレクトする方法を教えてください。Drupal 7 - そのページの設定を変更するまで、ユーザーを特定のページにリダイレクトする方法はありますか?

例:Anonユーザーがサイトに到着しても、問題なくブラウズできます。 ログイン/登録が完了したら、フォームを使ってページを表示し、そのフォームに記入するまで が他の場所に移動することを許可します。

このソリューションはキャッシュされたページで動作するため、hook_init()は使用できません。 hook_boot()は良い考えでしたが、読み込みが早すぎるため、必要なインクルードがたくさん読み込まれません。

また、解決策は、ページ要求は、実際のフォームが

任意のアイデア、提案(そうでない場合は、フォームを送信することはできません)提出しているかどうかを確認する必要がありますか?

+0

は、なぜあなたはhook_initがキャッシュされたページ上で使用することはできませんか?一度キャッシュフックをクリアすると、initが完璧に適合します。 –

答えて

1

だから、hook_init()は解決策であり、問​​題は$ userオブジェクトによって引き起こされたようです。トリックは、グローバルにフィールド値が含まれていないので、$ userオブジェクトをリロードする必要があるということです。

非常に簡単なコード例:

function mymodule_init(){ 
    global $user; 

    if($user->uid && $user->uid != 1){ 

     $account = user_load($user->uid); 
     $account = entity_metadata_wrapper('user', $account); 

     $destination = drupal_get_destination(); 

     if(!$account->field_setup_completed->value()){ 
      drupal_set_message('Setup incomplete.', 'error'); 

      if($destination['destination'] != 'setup-page' && $destination['destination'] != 'user/logout'){ 
       drupal_set_message('Redirecting to setup', 'error'); 
       drupal_goto('setup-page'); 
      } 
     } 
    } 
} 
+0

解決を確認して投稿していただきありがとうございます。 – Day

+0

私は質問しなければなりません。何らかの理由で 'entity_metadata_wrapper()'を使用していますか? 'user_load()'を呼んだら、 '$ account-> field_setup_completed [$ user-> language] [0] ['value']'をテストするだけで、不要な追加ステップです。私が尋ねる理由は、これまでにこの方法で使用されていたことを見たことがないからです。私はあなたの推論を知りたいと思っています:) – Clive

+0

Clive、あなたは正しいです、それを変換するポイントはありません。主にエンティティで動作します。 (また、後でその$ accountオブジェクトを使用してユーザーを変更しようとしていますが、これは例の一部ではありません) –