【发布时间】:2011-04-05 20:42:16
【问题描述】:
所以我在模板中有这段代码:
$thisuser = user_load(array('uid' => '11812'));
据我了解,它应该为 uid 为 11812 的用户返回一个用户对象。该对象应该在此变量中包含该用户的角色数组:
$thisuser->roles
但是那个数组不存在。
我已经使用调试器跟踪了 modules/user/user.module 中的 user_load() 函数,这段代码应该使用该角色数组填充 $user 对象:
$result = db_query('SELECT * FROM {users} u WHERE '. implode(' AND ', $query), $params);
if ($user = db_fetch_object($result)) {
$user = drupal_unpack($user);
$user->roles = array();
if ($user->uid) {
$user->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
}
else {
$user->roles[DRUPAL_ANONYMOUS_RID] = 'anonymous user';
}
$result = db_query('SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = %d', $user->uid);
while ($role = db_fetch_object($result)) {
$user->roles[$role->rid] = $role->name;
}
user_module_invoke('load', $user_info, $user);
}
else {
$user = FALSE;
}
通过这条线一切都很好:
$user = drupal_unpack($user);
但是,当我们点击下一行时,应该在 $user 对象中初始化一个空的“角色”数组,什么都没有发生:
$user->roles = array();
对象中根本没有“角色”数组出现。随后的 db 查询工作正常,并返回正确的角色信息,所以这个 while 循环:
while ($role = db_fetch_object($result)) {
$user->roles[$role->rid] = $role->name;
}
$role->rid 和 $role->name 每次循环都有正确的值,但是 $user->roles 仍然不存在,这里的赋值没有效果。
我正在为此拼命 - 我不知道发生了什么。我知道我可以直接查询 db 以获取用户的角色,如果我真的必须的话,但为什么 user_load() 代码不起作用?
有人知道发生了什么吗?
谢谢。
【问题讨论】:
-
与问题无关,但您应该只使用 user_load(11812),前者已被弃用,在 Drupal 7 中根本不起作用。
-
我也试过这样,但没有骰子。安装干净的 Drupal 后问题就消失了,所以我认为它必须是一个模块。
-
更正:在干净的 Drupal 安装上问题仍然存在。
标签: php drupal drupal-theming