Глобальная переменная $user

Опубликовано 2011.12.12

Глобальная переменная user хранит в себе основную информацию о текущем пользователе. То есть находясь на сайте в эту переменную помещается ваш ник,дата регистрации,e-mail и так далее. Получить эту переменную можно в любой функции любого модуля,главное чтоб она была объявленной. То есть в коде функции необходимо написать
  1. global $user
. Вывести переменную можно с помощью функции print_r , не echo , так как это не строка. Drupal 7: Итак,выводим:
  1. global $user;
  2. echo '<pre>';
  3. print_r($user);
  4. echo '</pre>';
Я запускаю эту функцию на реальном сайте и вижу: Я сразу оставлю комментарии ко всем нужным нам пунктам.
  1. stdClass Object
  2. (
  3. [uid] => 1 // уникальный номер пользователя
  4. [name] => admin //логин
  5. [pass] => $S$hfTY99АAckRXyPnCT8y7GaFhWG/pOv985O0ePXkrq //зашифрованный пароль
  6. [mail] => example@gmail.com //ящик
  7. [theme] => //тема пользователя.если она не задана-то используется тема по умолчанию
  8. [signature] => //подпись,указанная в настройках пользователя
  9. [signature_format] => filtered_html //формат ввода этой подписи
  10. [created] => 1316016673 //дата создания аккаунта
  11. [access] => 1323676302 //дата получения доступа к сайту
  12. [login] => 1323061398 //дата последнего логина
  13. [status] => 1 //статус.1-пользователь активен.0-заблокирован
  14. [timezone] => Europe/Moscow //временная зона(часовой пояс)
  15. [language] => ru //язык пользователя
  16. [picture] => 0 //аватар
  17. [init] => example@gmail.com
  18. [data] => Array
  19. (
  20. [contact] => 0
  21. [block] => Array
  22. (
  23. [views] => Array
  24. (
  25. [og_members-block_1] => 1
  26. )
  27.  
  28. )
  29.  
  30. [overlay] => 1
  31. [htmlmail_plaintext] => 0
  32. )
  33.  
  34. [sid] => 0nMYwlyPdjhGSddfK03bxQ2OTGTIchuGQg-CRQHvvSQ //идентификатор сессии
  35. [ssid] =>
  36. [hostname] => 41.41.151.11 //IP адрес пользователя
  37. [timestamp] => 1323676302 //его текущее время
  38. [cache] => 0
  39. [session] => 'много всего ненужного'
  40. [roles] => Array //роли пользователя
  41. (
  42. [2] => authenticated user
  43. [3] => super_administrator
  44. [5] => Автор
  45. )
  46.  
  47. )
Теперь,зная из чего состоит эта переменная-мы можем ей пользоваться. Примеры кода:
  1. global $user;
  2.  
  3. //вывод имени
  4. echo $user->name;
  5.  
  6. //IP
  7. echo $user->hostname;
  8.  
  9. //статус
  10. $status=$user->status;
  11. if($status==1){
  12. echo 'Пользователь '.$user->name.' активен';
  13. }else{
  14. echo 'Пользователь '.$user->name.' заблокирован';
  15. }
  16.  
  17. //ящик
  18. echo $user->mail;
Нечего сложного. Например если вам известен только uid пользователя-то можно воспользоваться функцией user_load, передав функции номер пользователя. Например:
  1. echo '<a href="/user/'.$user->uid.'">'.$user->name.'</a>';
Ещё:
  1. //загрузка пользователя под номером 5
  2. $user=user_load(5);
Если нужно изменить объект пользователя, то вначале загрузите его, потом добавьте/удалите свои данные и сохраните объект.
  1. // Загрузка пользователя под номером 7 и изменение ему почтового ящика
  2. $user=user_load(7);
  3. $user->mail = 'new-email@example.com';
  4. user_save($user);
  1. // Загрузка пользователя под номером 10 и добавление ему роли.
  2. // Роль обязательно должна быть создана заранее. Пусть это роль автора под номером 4
  3. $user=user_load(10);
  4. $user->roles[4]= 'Автор';
  5. user_save($user);
Обратите внимание, что сохранять надо объект пользователя, а не указывать только идентификатор пользователя.