Мне нужна функция для плагина, чтобы проверить, является ли показанная учетная запись учетной записью пользователя или учетной записи другой.
То, что делает указанный код, заключается в проверке, является ли зарегистрированный пользователь суперпользователем Drupal (он же пользователь № 1). Если это то, что вам действительно нужно, то нет необходимости вызывать user_load()
для загрузки объекта пользователя этой учетной записи. Вам достаточно использовать следующий код:
global $user;
if ($user->uid == 1) {
$items['user/%user/classifieds'] = array(
'title' => 'Meine Kleinanzeigen',
'type' => MENU_LOCAL_TASK,
'page callback' => 'tpzclassified_user_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
'weight' => 4,
);
}
return $items;
В Drupal нет двух пользователей с одинаковым идентификатором пользователя, и 1 - это идентификатор пользователя для суперпользователя Drupal (который также называется user # 1, поскольку его идентификатор равен 1).
Проблема с этим решением состоит в том, что начиная с Drupal 6, обратные вызовы меню кэшируются; условное добавление обратного вызова в меню не имеет никакого эффекта, поскольку кэш меню очищается только при установке нового модуля или при обновлении модуля (и вызывается update.php). Единственный способ заставить Drupal очистить кеш меню - использовать следующий код:
if (!variable_get('menu_rebuild_needed', FALSE)) {
variable_set('menu_rebuild_needed', TRUE);
}
Если вы хотите проверить, имеет ли текущий вошедший в систему пользователь доступ к своей учетной записи, вы можете использовать следующий код:
function tpzclassified_menu() {
$items['user/%user/classifieds'] = array(
'title' => 'Meine Kleinanzeigen',
'type' => MENU_LOCAL_TASK,
'page callback' => 'tpzclassified_user_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
'weight' => 4,
);
return $items;
}
Нет смысла использовать пользовательскую функцию, поскольку user_view_access()
уже проверяет, ищет ли текущий пользователь свою учетную запись.
function user_view_access($account) {
return $account && $account->uid &&
(
// Always let users view their own profile.
($GLOBALS['user']->uid == $account->uid) ||
// Administrators can view all accounts.
user_access('administer users') ||
// The user is not blocked and logged in at least once.
($account->access && $account->status && user_access('access user profiles'))
);
}