api.drupal.ru про локальные задачи:
В интерфейсе Друпал по умолчанию, вы найдёте много ссылок, которые показаны как вкладки. В системе меню они называются локальные задачи (local tasks) и по-умолчанию отображаются как вкладки (хотя и есть возможность представить их по-другому). Локальные задачи работают также, как и другие пункты меню во многих аспектах. Подробнее
Реализуются с помощью типов MENU_DEFAULT_LOCAL_TASK
и MENU_LOCAL_TASK
:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
// описание первой вкладки и по совместительству пункта меню
$items['admin/settings/mymodule'] = array(
'title' => 'MyModule', // заголовок страницы, будет выводится во всех вкладках, обязательный параметр
'page callback' => ..., // callback первой вкладки, обязательный параметр
'access arguments' => array(...), // разрешения на просмотр дефолтной вкладки, обязательный параметр
'type' => MENU_NORMAL_ITEM, // пункт будет отображаться в меню
);
// описание дефолтной вкладки
$items['admin/settings/mymodule/settings'] = array(
'title' => 'Settings', // не переведённое название первой вкладки
'type' => MENU_DEFAULT_LOCAL_TASK, // пункт будет отображаться как локальная задача по умолчанию, т.е. выделяться при просмотре страницы "admin/settings/mymodule"
);
// описание второй вкладки
$items['admin/settings/mymodule/items'] = array(
'title' => 'Items', // не переведённое название второй вкладки
'page callback' => ..., // callback второй вкладки
'access arguments' => array(...), // разрешения на просмотр второй вкладки, обязательный параметр
'type' => MENU_LOCAL_TASK, // пункт будет отображаться как локальная задача
'weight' => 2, // вес вкладки в списке вкладок
);
// описание третьей вкладки
$items['admin/settings/mymodule/add_item'] = array(
'title' => 'Add item',
'page callback' => ...,
'access arguments' => array(...),
'type' => MENU_LOCAL_TASK,
'weight' => 3,
);
return $items;
}
Написанное актуально для
Drupal 6, Drupal 7
Комментарии
У меня если в первом пункте меню не поставить 'page callback' то пункт с типом MENU_DEFAULT_LOCAL_TASK не отображается..
как заставить табы по ajax работать? Стандартные средсва для этого есть в семёрке?
стандартных средств нет
Как определить какой пункт меню был вызван?
MENU_NORMAL_ITEM или MENU_DEFAULT_LOCAL_TASK?
menu_get_item()
menu_get_item('path') выдает один и тот же адрес 'source'.
вызывайте без параметров
а вообще не понятен смысл просьбы. MENU_DEFAULT_LOCAL_TASK это просто описание вкладки для соответствующего MENU_NORMAL_ITEM
Смысл в том, что есть две ссылки от модуля, одна находится в главном меню, а другая находится как тут (Например пункт "Настройки").
Обе ссылки ведут на одну форму, их я описал в моём комментарии выше. Требуется определить какая ссылка была нажата. Если нажата та, которая находится в главном меню, то ничего не надо делать, в противном случае выполнить действие, если нажата вторая.
MENU_DEFAULT_LOCAL_TASK это не ссылка
Как определить что был нажат он? (Пункт, а не ссылка)
if ($_GET['q'] == 'source/list')
Да, был такой вариант, только несмотря на то что прописано $items['source/list'], всё равно в адресной строке "/?q=source", list никогда не отображается.
если вы переходите по адресу source/list как в адресной строке может быть source?
Не знаю, я нажимаю на вкладку и в адресной строке "/?q=source" не меняется на "/?q=source/list".
а для конкретного типа материала создать неограниченое число доп табов?
http://xandeadx.ru/blog/drupal/196
Как менять title у табов через callback?
Как перевести название вкладки?
Через - /admin/config/regional/translate/translate - её нет.
через какой то хук в модуле?
должно быть
Я тоже был уверен что должно быть, но его нет, может потому что оно тоже через hook_menu_alter() в том модуле?
сделал так же в своём модуле:
Добавить комментарий