2

我是 Drupal 的新手,所以我想创建一个自定义用户配置文件的简单模块,特别是我想为用户配置文件插入一些选项卡(传统的用户配置文件有 2 个选项卡“查看选项卡”和“编辑选项卡”)所以现在我想要添加更多 3 个标签。

  • 显示历史
  • 分享个人资料
  • 捷径

但它只适用于经过身份验证的用户而不是管理员配置文件(当管理员显示他的配置文件时,配置文件是传统配置文件)。所以它是我的代码(我的模块名称是:tung_tab),这里是 tung_tab.module 的代码:

function tung_tab_menu() 
{
    $items = array();
    global $user;
        //if (!user_access('administer'))
        if($user->uid!=1)
     {
      $items['user/%/rvhistory'] = array(
        'title' => 'Review History ',
        'description' => 'Review History',
        //'page callback' => 'drupal_get_form',
        //'page arguments' => array('tung_tab_confirm_reviewh', 1),
        'access callback' => 'user_view_access',
        'access arguments' => array(1),
        'type' => MENU_LOCAL_TASK,
      );
      $items['user/%/sharehistory'] = array(
        'title' => 'Share History',
        'description' => 'Share History',
        //'page callback' => 'drupal_get_form',
        //'page arguments' => array('tung_tab_confirm_shareh', 1),
        'access callback' => 'user_view_access',
        'access arguments' => array(1),
        'type' => MENU_LOCAL_TASK,
      );
      $items['user/%/sc'] = array(
        'title' => 'Shortcut',
        'description' => 'Shortcut',
        //'page callback' => 'getDescription',
        //'page arguments' => array('tung_tab_confirm_shareh', 1),
        'access callback' => 'user_view_access',
        'access arguments' => array(1),
        'type' => MENU_LOCAL_TASK,
      );
     }
      return $items;
}

它适用于管理选项卡,但是当我注销然后与其他用户登录但没有改变时,如果我评论 //if($user->uid) 行,一切都可以,所以当我添加更多代码时在这一行 'title' => 'Review History '.$user->uid,当我是管理员时,它显示 Review History 1 当我用另一个帐户登录时,一切都一样,Review History 1 我不能明白为什么?我认为我的代码出现了一些错误,我将模块放在“mysite/sites/default/modules/”中

4

1 回答 1

2

您不应该在if 条件中定义菜单项。您应该使用访问回调和访问参数来控制对菜单回调的访问。

错误的:

function tung_tab_menu() 
{
    $items = array();
    global $user;
    if($user->uid!=1)
    {
        // defined menu items
    }
    return $items;
}

正确的:

function tung_tab_menu() 
{
    $items = array();
    global $user;
    // define the menu items here...
    return $items;
}

尝试解决这个问题,然后看看你是否仍然得到相同的结果。

于 2012-05-08T07:32:58.090 回答