Задача
Нужно на страницу ноды, где по умолчанию есть табы "Смотреть" ("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);
}
}
Использованные материалы:






























Комментарии
Спасибо за статью, возникло 2 вопроса:
В какой файл этот код вставлять?
А как сделать так, чтоб у ноды часть полей выводилась на вкладке "Основная Инфа", часть на "Дополнительная инфа" и часть на "Комментарии" ?
Этот код вставляется в ваш новый модуль, который вы сами пишете.
Файл должен называться ВАШ_МОДУЛЬ.module.
Спасибо очень помогли ваши примеры... На друпал орше ничего путнего, по этому вопросу не нашел....