Drupal - hook_menu_alter - 添加访问回调以检查查看的用户配置文件不是当前用户

时间:2011-03-01 16:19:09

标签: drupal drupal-6

无法理解这个......

我在用户个人资料中添加了“联系人”标签。如果用户个人资料不属于登录用户,我想要隐藏此内容。

我在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 //???
} 

干杯!

(我已经检查过在询问older question后实际访问了该标签。)

3 个答案:

答案 0 :(得分:3)

试试这个:

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

$ user:这是当前用户,请注意全局语句,以便它在您的函数中可见 $ account:这是传递给您的函数的用户帐户。需要重命名,因为$ user已经为当前登录的用户保留。

答案 1 :(得分:1)

这应该可以解决问题:

$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;
} 

除非登录用户的ID与用户//联系人相同,否则将返回FALSE,从而隐藏菜单链接。您不希望将$ user与access参数进行比较,因为参数将是用户ID,而不是用户对象。 $ user-> uid是用户ID。

答案 2 :(得分:0)

好的,谢谢你让我更接近解决方案。我发现如果我单独引用$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); 

......并使用Matt的功能:

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