我在用户个人资料页面上显示了多个块,user / uid
在每个人身上,我需要打印用户名。
我在每个街区都在做$user = user_load(arg(1)); print $user->name;
。由于没有缓存,因为你可以成像,性能是可怕的。
是否有办法更有效地获取用户名或缓存user_load。
感谢。
答案 0 :(得分:3)
只需添加一个中间函数即可自行提供静态缓存:
/**
* 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];
}
答案 1 :(得分:2)
使用menu_get_object()
这是检索从正确声明的网页的网址加载的对象(用户,节点等)的正确方法。它将使用在arg(1)
找到的uid返回已加载的用户对象,用于在其路径中使用%user
的菜单项(即$items['user/%user']
,user_menu()
中的$ items['user/%user/view']
等。
$account = menu_get_object('user');
答案 2 :(得分:0)
用户是全球性的。
function myfunction(){ 全球$用户; }
答案 3 :(得分:0)
这篇名为How to cache usernames的博文可能会有用。