Drupal → Создание локальных задач (табы, вкладки)
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; }
Комментарии
У меня если в первом пункте меню не поставить '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() в том модуле?
сделал так же в своём модуле:
Оставить комментарий