xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

/**
 * 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
Похожие записи

Комментарии RSS

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

проверяйте в access callback роль

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

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

здорово ,,, спасибо

Спасибо! Странно, но почему-то раньше не работало, пользовался кодом, выдранным из 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?

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

hook_menu_alter + MENU_DEFAULT_LOCAL_TASK

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

Добрый день.

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

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

  $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',
  );

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

а как добавить вкладку по ссылке 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 показывает, как подраздел, но вкладка не появляется на странице журнала

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании