Drupal: Getting user name on user account page without breaking performance
I have multiple blocks shown on the user profile page, user/uid
On each of them, I need to print the user name.
开发者_开发技巧I've been doing a $user = user_load(arg(1)); print $user->name;
on each block. Since there is no caching, as you can image the performance is HORRIBLE.
Is there either a way to get the user name more efficiently or to cache user_load.
Thanks.
Just add an intermediate function to provide the static caching yourself:
/**
* 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];
}
Use menu_get_object()
which is the proper way to retrieve an object (user, node, etc.) loaded from the URL of a properly declared page. It will return the user object that has already been loaded using the uid found at arg(1)
for a menu item which use %user
in its path (ie. $items['user/%user']
, $items['user/%user/view']
, etc. in user_menu()
.
$account = menu_get_object('user');
The user is a global.
function myfunction() { global $user; }
精彩评论