Drupal → Создание локальных задач (табы, вкладки)

26.05.2010

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

Комментарии

Гость
06.07.2011, 16:07

У меня если в первом пункте меню не поставить 'page callback' то пункт с типом MENU_DEFAULT_LOCAL_TASK не отображается..

как заставить табы по ajax работать? Стандартные средсва для этого есть в семёрке?

Как определить какой пункт меню был вызван?
MENU_NORMAL_ITEM или MENU_DEFAULT_LOCAL_TASK?

    $items['source'] = array(
        'title' => 'Источники',
	'page callback' => 'drupal_get_form',
        'page arguments' => array('source_list'),
	'access arguments' => array('access content'),
	'type' => MENU_NORMAL_ITEM,
    );
 
    $items['source/list'] = array(
        'title' => 'Список источников',
        'type' => MENU_DEFAULT_LOCAL_TASK,
        'weight' => 1,
    );

menu_get_item('path') выдает один и тот же адрес 'source'.

а вообще не понятен смысл просьбы. MENU_DEFAULT_LOCAL_TASK это просто описание вкладки для соответствующего MENU_NORMAL_ITEM

Смысл в том, что есть две ссылки от модуля, одна находится в главном меню, а другая находится как тут (Например пункт "Настройки").

Обе ссылки ведут на одну форму, их я описал в моём комментарии выше. Требуется определить какая ссылка была нажата. Если нажата та, которая находится в главном меню, то ничего не надо делать, в противном случае выполнить действие, если нажата вторая.

// пункт будет отображаться как локальная задача по умолчанию, т.е. выделяться при просмотре страницы "admin/settings/mymodule"

Как определить что был нажат он? (Пункт, а не ссылка)

Да, был такой вариант, только несмотря на то что прописано $items['source/list'], всё равно в адресной строке "/?q=source", list никогда не отображается.

если вы переходите по адресу source/list как в адресной строке может быть source?

Не знаю, я нажимаю на вкладку и в адресной строке "/?q=source" не меняется на "/?q=source/list".

а для конкретного типа материала создать неограниченое число доп табов?

Гость
12.10.2012, 08:33

Как менять title у табов через callback?

Игорь
21.03.2013, 12:48
'title' => 'Items', // не переведённое название второй вкладки

Как перевести название вкладки?
Через - /admin/config/regional/translate/translate - её нет.
через какой то хук в модуле?

Через - /admin/config/regional/translate/translate - её нет.

должно быть

Игорь
21.03.2013, 13:11

Я тоже был уверен что должно быть, но его нет, может потому что оно тоже через hook_menu_alter() в том модуле?
сделал так же в своём модуле:

/**
 * Implements hook_menu_alter().
 */
function mymodule_menu_alter(&$callbacks) {
  $callbacks['user/%user_category/edit/mobile']['title arguments'][0] = 'Новый тайтл';
}

Добавить комментарий