2011-10-28 19 views
2

在Drupal的6可以使用以下一個相似的代碼:修改帶有hook_user_load()的用戶對象

function example_user($op, &$edit, &$account, $category = NULL) { 
    switch($op) { 
    case 'load': 
     $account->fb_id ='xyz' 
     break; 
    } 
} 

在Drupal 7的,用於hook_user_load()狀態的文檔的以下內容:

由於在user_load_multiple()中的靜態緩存中,您不應該使用此掛接來修改由{users}表本身返回的用戶屬性,因爲從緩存加載時可能會導致不可靠的結果。

爲什麼我得到用戶而不僅僅是一個用戶?

可以添加屬性嗎?

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_load/7

+0

你有沒有運氣? – Scott

回答

2

你得到用戶對象的數組,因爲鉤從user_load_multiple(),一般稱之爲DrupalDefaultEntityController::load(),然後調用DrupalDefaultEntityController::attachLoad()調用。

可以添加自定義屬性,但不能覆蓋從「{users}」表加載的默認屬性;正如從文檔中報告的那樣,在這種情況下,從緩存中加載用戶對象時可能會遇到一些問題,這正是實體API通常所做的。

+0

如果您的外部數據庫包含的每個用戶的權威性更高的電子郵件地址與Drupal相比會怎樣?覆蓋Drupal值仍然不行嗎? – Trejkaz

+0

我報告的內容也適用於'$ user-> mail'。如果您有一個包含電子郵件地址的外部數據庫,則應將它們導入到Drupal使用的數據庫表中。 Drupal假設其數據庫對其用戶數據具有權威性。 – kiamlaluno

+0

好吧,那麼有沒有一種標準的方法來複制模塊中的值?在沒有Drupal知識的情況下,外部登錄系統中的信息可能會隨時更改。 – Trejkaz