Drupal: получение имени пользователя на странице учетной записи без потери производительности - PullRequest
2 голосов
/ 11 марта 2010

У меня есть несколько блоков, показанных на странице профиля пользователя, user / uid

На каждом из них мне нужно напечатать имя пользователя.

Я делал $user = user_load(arg(1)); print $user->name; на каждом блоке. Поскольку кэширование отсутствует, как вы можете видеть, производительность ужасна.

Есть ли способ получить имя пользователя более эффективно или кэшировать user_load.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 11 марта 2010

Просто добавьте промежуточную функцию для обеспечения статического кэширования самостоятельно:

/**
 * Proxy for user_load(), providing static caching
 * NOTE: Only works for the common use of user_load($uid) - will NOT load by name or email
 *
 * @param int $uid - The uid of the user to load
 * @param bool $reset - Wether to reset the static cache for the given uid, defaults to FALSE
 * @return stdClass - A fully-loaded $user object upon successful user load or FALSE if user cannot be loaded.
 */
function yourModule_user_load_cached($uid, $reset = FALSE) {
  static $users = array();

  // Do we need to (re)load the user?    
  if (!isset($users[$uid]) || $reset) {
    $users[$uid] = user_load($uid);
  }

  return $users[$uid];
}
2 голосов
/ 27 августа 2012

Используйте menu_get_object(), который является правильным способом получения объекта (пользователь, узел и т. Д.), Загруженного из URL-адреса правильно объявленной страницы. Он вернет пользовательский объект, который уже был загружен, используя uid, найденный в arg(1) для пункта меню , который использует %user в своем пути (т.е. в user_menu().

$account = menu_get_object('user');
0 голосов
/ 11 марта 2010

Этот пост в блоге под названием Как кэшировать имена пользователей может быть полезен.

0 голосов
/ 11 марта 2010

Пользователь глобальный.

function myfunction () { глобальный пользователь $; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...