Drupal - hook_menu_alter - добавить обратный вызов для проверки того, что просмотренный профиль пользователя не является текущим - PullRequest
1 голос
/ 01 марта 2011

Не могу разобраться с этим ...

Я добавил вкладку "контакты" в профили пользователей.Что я хочу сделать, это скрыть это, если профиль пользователя НЕ принадлежит зарегистрированному пользователю.

Я получил это в реализации hook_menu_alter:

$items['user/%views_arg/contacts'] = array(
           'access callback'=>'current_user_hide_tabs', 
           'access arguments'=>array(1), 
        ); 

Я просто могуКажется, не работает соответствующая функция:

function current_user_hide_tabs($user) {
  return $user->uid != $account->uid //???
} 

Приветствия!

(Я проверил, что вкладка действительно доступна после того, как задан старый вопрос .)

Ответы [ 3 ]

3 голосов
/ 01 марта 2011

Попробуйте это:

function current_user_hide_tabs($account) {
  global $user;
  return $user->uid != $account->uid;
}

$ user: это текущий пользователь, обратите внимание на глобальный оператор, чтобы он был виден внутри вашей функции $ account: это учетная запись пользователя, переданная вашей функции. Необходимо переименовать, потому что $ user уже зарезервирован для текущего пользователя.

1 голос
/ 02 марта 2011

Это должно сработать:

$items['user/%/contacts'] = array(
  'access callback'=>'current_user_hide_tabs', 
  'access arguments'=>array(1), 
); 

function current_user_hide_tabs($uid) {
  global $user;

  return $user->uid == $uid;
} 

Вернет FALSE, если идентификатор пользователя, вошедшего в систему, не совпадает с // контактами пользователя, таким образом скрывая ссылку меню.Вы не хотите сравнивать $ user с аргументом доступа, потому что аргумент будет идентификатором пользователя, а не объектом пользователя.$ user-> uid - это идентификатор пользователя.

0 голосов
/ 02 марта 2011

ОК, ребята, спасибо, что приблизили меня к решению.Я обнаружил, что это работает, если я ссылаюсь на переменные $items по отдельности и не использую массив ... ???

Так что не:

$items['user/%views_arg/contacts'] = array(
   'access callback'=>'current_user_hide_tabs', 
   'access arguments'=>array(1), 
); 

... но:

$items['user/%views_arg/contacts']['access callback'] = 'current_user_hide_tabs';
$items['user/%views_arg/contacts']['access arguments'] = array(1); 

... и используя функцию Мэтта:

function current_user_hide_tabs($uid) {
  global $user;
  return $user->uid != $uid;
} 
...