所以我在模板中有这个代码:
$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对象中初始化一个空的“roles”数组,没有任何反应:
$user->roles = array();
根本没有“roles”数组显示在对象中。后续的数据库查询工作正常,并返回正确的角色信息,因此这个循环:
while ($role = db_fetch_object($result)) {
$user->roles[$role->rid] = $role->name;
}
每次循环时,都有$ role-> rid和$ role->名称中的正确值,但$ user->角色仍然不存在,此处的分配无效。
我正在反对这一点 - 我无法弄清楚发生了什么。我知道我可以直接查询db以获取用户的角色,如果我真的必须,但为什么user_load()代码不起作用?
任何人都知道发生了什么事吗?
感谢。
答案 0 :(得分:0)
如果您刚刚执行了user_load(11812)该怎么办?通过Drupal 6,这一直对我有用。
答案 1 :(得分:0)
经过多次痛苦,我确定这不是Drupal的问题。这是我的愚蠢的调试器,MacGDBp。它有一个错误(或与Xdebug插件的macports版本的交互),当有超过32个变量时,它会导致对象实例变量不显示在检查器中。
太愚蠢了。
无论如何,如果你正在使用MacGDBp,请注意这个问题。