Добавить таб на страницу ноды

21 Дек 2009
Опубликовано VladSavitsky

Задача
Табы и вкладкиНужно на страницу ноды, где по умолчанию есть табы "Смотреть" ("View") и "Редактировать" ("Edit") добавить произвольный таб.

Решение

Добавление таба в Drupal 6

Таб для всех нод и без ограничения доступа:
$items['node/%node/new_tab'] = array(
    'title' => 'New Tab',
    'page callback' => 'mycallback',
    'page arguments' => array(1),
    'access callback'   => TRUE,
    'type' => MENU_LOCAL_TASK
)

Для нод определённого типа ('my_type' в данном примере):
$items['node/%my_node_type/new_tab'] = array(
    'title' => 'New Tab',
    'page callback' => 'mycallback',
    'page arguments' => array(1),
    'access callback'   => TRUE,
    'type' => MENU_LOCAL_TASK
)

...

function my_node_type_load($arg) {
  $node = node_load($arg);
  if($node->type == 'my_type')
    return $node;
  return FALSE;
}

Или можно это сделать на этапе проверки прав доступа к пункту меню:
/**
* Implementation of hook_menu().
*/

function my_module_menu() {
$items['node/%/new_tab'] = array(
'title' => 'Pay Here',
'page callback' => 'mycallback',
'page arguments' => array(1),
'access callback' => 'custom_loader',
'access arguments' => array(1),
'type' => MENU_LOCAL_TASK,
);
return $items;
}

function custom_loader($param) {
$node = node_load($param , $revision = NULL, $reset = NULL);
if($node->type == 'my_node_type')
return TRUE;
return FALSE;
}

Добавление таба в Drupal 5

Добавление таба к ноде типа ‘my_type’, которая будет видна только пользователям, которые могут видеть саму ноду:
if (arg(0) == ‘node’ && is_numeric(arg(1))) {
  $node = node_load(arg(1));
  if ($node->type == ‘my_type’) {
     $items[] = array(
          ’path’ => ‘node/. arg(1) ./images‘,
          ‘title’ => t(’Images’),
          ‘callback’ => ’show_tab_page’,
          ‘callback arguments’ => array($node),
          ‘access’ => node_access(’view’, $node),
          ‘type’ => MENU_CALLBACK);
  }
}

Использованные материалы:
How to add a tab to a node's display?
Can't add MENU_LOCAL_TASK to specific node-types
Display menu or tab according to nodetype in Drupal

]]>]]>
Авторы решений:
Версия Drupal:

Комментарии

Спасибо за статью, возникло 2 вопроса:
В какой файл этот код вставлять?
А как сделать так, чтоб у ноды часть полей выводилась на вкладке "Основная Инфа", часть на "Дополнительная инфа" и часть на "Комментарии" ?

Vladimir | Янв 12th, 2010 в 6:35 после полудня

Этот код вставляется в ваш новый модуль, который вы сами пишете.
Файл должен называться ВАШ_МОДУЛЬ.module.

VladSavitsky | Янв 19th, 2010 в 12:28 утра

Спасибо очень помогли ваши примеры... На друпал орше ничего путнего, по этому вопросу не нашел....

Кирилл | Фев 15th, 2010 в 9:21 утра
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>