user->uid всегда равно 1 для любого пользователя?

Я новичок в 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' => 'History Review'.$user->uid, Когда я являюсь администратором. Это показывает, что History Review 1 Когда я вошел с другой учетной записью, все то же самое, History Review 1 Я не могу понимаю почему? Я думаю, что в моем коде произошла ошибка. Я поместил свой модуль в "mysite/sites/default/modules/".

1 ответ

Вы не должны определять пункты меню внутри условия 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;
}

Попытайтесь это исправить, а затем посмотрите, получите ли вы те же результаты.

Другие вопросы по тегам