Змінення об'єкта користувача за допомогою hook_user_load ()

У Drupal 6 ви можете використовувати код, подібний до наступного:

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

2
Ти мав щастя?
додано Автор Scott, джерело

1 Відповіді

Ви отримуєте масив об'єктів користувача, тому що гачок викликається з user_load_multiple() , що зазвичай викликає DrupalDefaultEntityController :: load() , який потім викликає DrupalDefaultEntityController :: attachLoad() .

Добре додавати власні властивості, але не перевизначати властивості за замовчуванням, завантажені з таблиці "{users}"; як повідомлялося з документації, у такому випадку ви можете зіткнутися з проблемою під час завантаження об'єкта користувача з кеша, тобто як правило, це API entity.

2
додано
Те, що я повідомив, дійсно також для $ user-> mail . Якщо у вас є зовнішня база даних, яка містить адреси електронної пошти, ви повинні імпортувати їх у таблицю бази даних, що використовується Drupal. Друпал вважає, що його база даних авторитетна щодо даних користувача.
додано Автор kiamlaluno, джерело
Що робити, якщо ваша зовнішня база даних містить більш авторитетну адресу електронної пошти для кожного користувача, ніж Drupal? Чи все-таки непогано перезаписати значення Drupal?
додано Автор Trejkaz, джерело
Добре, так чи є стандартний спосіб копіювати значення в модулі? Інформація в системі зовнішньої реєстрації може змінюватися в будь-який час без знання Drupal.
додано Автор Trejkaz, джерело