В чём разница между global $user и $user = user_load($account->uid) ?

Главные вкладки

Аватар пользователя strelkov.av strelkov.av 20 мая 2020 в 12:18

Добрый день, дилетантский вопрос по Drupal 7
Использую 2 хука

<?php
function hook_username_alter(&$name$account) {
  
$user user_load($account->uid);
  if (!empty(
$user->full_name)) {
    
$name =  $user->full_name;
  }
}
?>

Переопределяю выводимое имя пользователя по значению из дополнительной колонки в таблице users

и

<?php
function hook_views_query_substitutions($view) {
  global 
$user;
  return array(
    
'***USER_FULL_NAME***' => $user->full_name,
  );
}
?>

Добавляю substitutions в Views

Вроде бы как по сути что global $user что $user = user_load($account->uid) получают текущего пользователя, но судя по гугла и тестам, нельзя в первом примере заюазть global $user , так и наоборот во втором из первого.

Комментарии

Аватар пользователя charOFF charOFF 20 мая 2020 в 12:59
1

hook_username_alter вызывается при отображении любого имени пользователя. Т.е. если открыть допустим /admin/people, то хук будет вызван для каждого пользователя в списке, и при каждом вызове $account будет разный соответственно

Аватар пользователя adano adano 20 мая 2020 в 14:20

global $user - "текущий" юзер, который в данный момент посещает сайт
user_load - загружает объект-юзера

Drupal имеет глобальный объект $user, который представляет пользователя, вошедшего в систему. Таким образом, чтобы избежать путаницы и избежать загромождения глобального объекта $user, хорошей идеей будет присвоить результат этой функции другой локальной переменной, обычно $account.

Почитать:
https://api.drupal.org/api/drupal/developer!globals.php/global/user/7.x
https://api.drupal.org/api/drupal/modules%21user%21user.module/function/...

P.S. И модуль, который, скорее всего, будет вам полезен:
https://www.drupal.org/project/realname