Drupal → Как программно добавить новую вкладку в профиль пользователя

28.05.2011

По аналогии с Как добавить новую вкладку для определённого типа материала:

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items['user/%user/mytab'] = array(
    'title' => 'My Tab',
    'page callback' => 'mymodule_mytab',
    'page arguments' => array(1),
    'access arguments' => array('access content'),
    'type' => MENU_LOCAL_TASK,
    'weight' => 10,
  );

  return $items;
}

/**
 * Page callback.
 */
function mymodule_mytab($user) {
  return '<pre>' . htmlspecialchars(print_r($user, true)) . '</pre>';
}

Новая вкладка в профиле пользователя

Написанное актуально для
Drupal 6, Drupal 7
Похожие записи

Комментарии

Гость
04.06.2011, 15:31

Добрый день! А как можно создать разные вкладки для разных ролей?

Гость
04.06.2011, 19:04

Возможно Вы меня не поняли... Например пользователь имеет роль заказчик, то в при просмотре его профиля будет создан таб "проекты", а если испольнитель - таб "портфолио". Т.е. набор табов не зависит от роли того, кто просматривает чужие профили.

проверяйте роль просматриваемого юзера

Спасибо! Странно, но почему-то раньше не работало, пользовался кодом, выдранным из user.module:

    $items['user/%user_category/list'] = array(
        'title' => t('Sample page'),
        'page callback' => 'avuser_list',
        'page arguments' => array(1),
        'access callback' => 'user_edit_access',
        'access arguments' => array(1),
        'type' => MENU_LOCAL_TASK,
        'load arguments' => array('%map', '%index'),
        'weight' => -10,
        'file' => 'avuser.product.inc',
    );

Так, конечно, намного приятнее

Добрый день!
Немного оффтоп, но по этому кусочку кода.

'page arguments' => array(1),
Как так получается, что целое число в функции mymodule_mytab($user) стало объектом $user?

Везде копался, но ни как не найду информацию, как можно скрыть основной таб в профиле юзера (просмотр), и перенаправить основную ссылку на профиль на другой, второй таб. Такое вообще возможно?

Подскажите я вывожу таб в /edit в профиле. Подскажите что не хватает в коде выше что бы табы от дргих страниц на загружаемой странице по клике на таб - MyTab оставались... ???

Роман
29.10.2013, 18:22

Добрый день.

Создаю обобщенные элементы меню и пытаюсь их привязать к меню, созданному в админке. Не получается. А вот если адрес элемента меню задать необобщенным, то всё работает.

Например, вот так не работает

  $items['user/%/wall'] = array(
    'title' => 'user wall',
    'page callback' => 'yr_user_wall',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'menu-user-menu-2',
  );

function yr_user_wall($user)
{
  return 'Вот такая стена пользователя !';
}

Отображение меню делаю вот так

   $mm = menu_tree('menu-user-menu-2');
    print render($mm);

Функция kpr($mm) - возвращает пустой массив.

А вот так работает:

  $items['user/wall'] = array(
    'title' => 'user wall',
    'page callback' => 'yr_music_user_wall',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'menu-user-menu-2',
  );

Вы не подскажете, в чем здесь может быть проблема ?
Заранее благодарен.

Андрей
09.12.2014, 20:59

а как добавить вкладку по ссылке admin/reports/dblog?

Пробовал такой вариант:

$items['admin/reports/dblog/server-logs'] = array(
    'title' => 'Логи',
    'description' => 'Отображение логов',
    'page callback' => 'view_logs',
    'access arguments' => array('administer site configuration'),
    'file' => 'logs.inc',
    'type' => MENU_LOCAL_TASK,
  );

Он не работает, в admin menu показывает, как подраздел, но вкладка не появляется на странице журнала

Гость
14.10.2016, 23:47

А как добавить свой класс к ссылке меню?

Сергей
12.01.2018, 13:52

Простите за дилетантский вопрос, а как туда добавить какой-нибудь контент?

Добавить комментарий