2012-01-03 50 views
0

我怎麼能強迫的Drupal 7將用戶重定向到某個頁面(其中包含一種形式)的地方網站上的用戶點擊後,他們登錄,直到他們填寫該表格?Drupal 7 - 如何將用戶重定向到某個頁面,直到他們更改該頁面上的設置?

如:匿名用戶到達現場,他們可以瀏覽周圍沒有問題。 一旦他們登陸/註冊,我想顯示一個頁面(有形式),而不是讓 他們去別的地方,直到他們填寫該表格出來。

該解決方案具有緩存頁面工作,所以hook_init()不能使用。 hook_boot()似乎是一個好主意,但它加載得太早,並且很多所需的includes都不會加載。

此外,該解決方案必須檢查是否頁請求的實際形式提交(否則他們將無法提交表格)

任何意見,建議?

+0

你爲什麼不能上高速緩存的頁面使用hook_init?一旦你清除了緩存鉤子init將是一個完美的契合。 – 2012-01-03 07:19:15

回答

1

好了,似乎hook_init()是解決方案,問題是由$用戶對象引起的。訣竅是,您必須重新加載$ ​​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 2012-01-03 15:32:56

+0

我必須問......你是否使用'entity_metadata_wrapper()'出於任何特定的原因?這是一個不必要的額外步驟,因爲您可以在調用'user_load()'後測試'$ account-> field_setup_completed [$ user-> language] [0] ['value']''。我想問的原因是因爲我從來沒有見過它以這種方式使用之前,我很想知道你的推理:) – Clive 2012-01-03 15:34:53

+0

克萊夫,你是對的,沒點轉換它在那裏,我只是習慣了它,因爲我主要與實體合作。 (另外,我打算稍後使用該$賬戶對象來對用戶進行更改,但這不是該示例的一部分) – 2012-01-03 16:11:41

相關問題