Итак, у меня есть этот код в шаблоне:
$thisuser = user_load(array('uid' => '11812'));
который, насколько я понимаю, должен возвращать объект пользователя для пользователя с идентификатором 11812. И этот объект должен содержать массив ролей для этого пользователя в этой переменной:
$thisuser->roles
Но этот массив не существует.
Я отследил функцию user_load () в modules / user / user.module с помощью отладчика, и этот код должен заполнить объект $ user этим массивом role:
$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);
но затем, когда мы нажимаем на следующую строку, которая должна инициализировать пустой массив "role" в объекте $ user, ничего не происходит:
$user->roles = array();
В объекте вообще не отображается массив "role". Последующие дБ-запросы работают нормально и возвращают правильную информацию о роли, поэтому этот цикл while:
while ($role = db_fetch_object($result)) {
$user->roles[$role->rid] = $role->name;
}
имеет правильные значения в $ role-> rid и $ role-> name каждый раз в цикле, но $ user-> role по-прежнему не существует, и назначения здесь не действуют.
Я бьюсь головой об этом - я не могу понять, что происходит. Я знаю, что могу просто запросить базу данных напрямую, чтобы получить роли пользователя, если я действительно должен, но почему бы не работал код user_load ()?
Кто-нибудь знает, что происходит?
Спасибо.