• урок
  • pantey

Создаем табы для административных страниц своего модуля в Drupal 7

18.07.2014

При разработке своих модулей, практически всегда встает вопрос о структуре параметров (настроек) модуля. Решением в Drupal 7 стало использование табов, которые содержат ссылки на необходимые страницы настроек данного модуля. Что бы вы более четко понимали о чем я говорю, посмотрите на скриншот ниже:

Табы на ссылки административных страниц

Здесь, как вы видите, представлены табы для управления и отображения полями своего типа материала.

Как создать нечто подобное для административных страниц своего модуля, я вам сейчас продемонстрирую. Итак, допустим у нас есть некий модуль, назовем его «tabs», который имеет две страницы администрирования, что они будут в себе нести, в данном случае неважно. Если вы хотите повторить урок за мной, то вот исходный код модуля:

tabs.info

  1. name = Tabs
  2. description = Example Tabs administration page
  3. package = Other
  4. core = 7.x

tabs.module

  1. /**
  2. * Implements hook_menu
  3. */
  4. function tabs_menu(){
  5. $items = array();
  6. $items['admin/config/tabs'] = array(
  7. 'title' => 'Settings for module tabs',
  8. 'access arguments' => array('administer site configuration'),
  9. );
  10. $items['admin/config/tabs/tab1'] = array(
  11. 'title' => 'Page Tab 1',
  12. 'access arguments' => array('administer site configuration'),
  13. 'page callback' => 'tabs_list',
  14. );
  15. $items['admin/config/tabs/tab2'] = array(
  16. 'title' => 'Page Tab 2',
  17. 'access arguments' => array('administer site configuration'),
  18. 'page callback' => 'tabs_edit',
  19. );
  20. return $items;
  21. }
  22. /**
  23. * Callback tabs_list
  24. */
  25. function tabs_list(){
  26. return t('Страница Tab 1');
  27. }
  28. /**
  29. * Callback tabs_edit
  30. */
  31. function tabs_edit(){
  32. return t('Страница Tab 2');
  33. }

После активации данного модуля, вы увидите дополнительный раздел на странице администрирования, где вам будут доступны 2 ссылки:

Хочу заметить, что данный раздел был сформирован Drupal автоматически, исходя из URL страниц, а так же дефолтного их состояния. После создания табов, данного раздела не будет!

Результат работы модуля

Но если вы перейдете по ним, то естественно никаких табов вы не увидите:

Теперь, давайте это дело исправлять. Создание табов можно разделить на 3 этапа:

  • Создание родительской страницы
  • Создание дефолтного таба, именно этот таб будет активен, при переходе на родительскую страницу
  • Все остальные табы, которые должны быть доступны.

За родительскую страницу у нас отвечает, как вы наверное поняли по коду, страница с URL

  1. admin/config/tabs

За дефолтный таб, мы возьмем URL

  1. admin/config/tabs/tab1

Ну а третий URL, будет как дополнительный таб:

  1. admin/config/tabs/tab2

Для определения дефолтного таба, мы должны задать ему тип:

  1. MENU_DEFAULT_LOCAL_TASK

Для определения другого таба, мы должны задать тип:

  1. MENU _LOCAL_TASK

А так же допишем callback для родительской страницы, в качестве используемой функции, возьмем функцию дефолтного таба, а именно

  1. tabs_list()

Теперь допишем все изменения в функцию tabs_menu:

  1. /**
  2. * Implements hook_menu
  3. */
  4. function tabs_menu(){
  5. $items = array();
  6. $items['admin/config/tabs'] = array(
  7. 'title' => 'Settings for module tabs',
  8. 'access arguments' => array('administer site configuration'),
  9. 'page callback' => 'tabs_list',
  10. );
  11. $items['admin/config/tabs/tab1'] = array(
  12. 'title' => 'Page Tab 1',
  13. 'access arguments' => array('administer site configuration'),
  14. 'type' => MENU_DEFAULT_LOCAL_TASK,
  15. );
  16. $items['admin/config/tabs/tab2'] = array(
  17. 'title' => 'Page Tab 2',
  18. 'access arguments' => array('administer site configuration'),
  19. 'page callback' => 'tabs_edit',
  20. 'type' => MENU_LOCAL_TASK,
  21. );
  22. return $items;
  23. }

После чего чистим кеш сайта и переходим по адресу:

  1. admin/config/tabs

и смотрим что получилось:

Табы на ссылки административных страниц из своего модуля

Как видим, мы добились того, что нам было необходимо.

Если же вам необходим свой раздел администрирования на странице

  1. admin/config

То вам достаточно зарегистрировать новый URL, с уровнем (аргументом) URL выше, например ваш файл tabs.module может выглядеть так:

  1. /**
  2. * Implements hook_menu
  3. */
  4. function tabs_menu(){
  5. $items = array();
  6. $items['admin/config/mytabs'] = array(
  7. 'title' => 'Settings for module My tabs',
  8. 'access arguments' => array('administer site configuration'),
  9. );
  10. $items['admin/config/mytabs/tabs'] = array(
  11. 'title' => 'Settings for module tabs',
  12. 'access arguments' => array('administer site configuration'),
  13. 'page callback' => 'tabs_list',
  14. );
  15. $items['admin/config/mytabs/tabs/tab1'] = array(
  16. 'title' => 'Page Tab 1',
  17. 'access arguments' => array('administer site configuration'),
  18. 'type' => MENU_DEFAULT_LOCAL_TASK,
  19. );
  20. $items['admin/config/mytabs/tabs/tab2'] = array(
  21. 'title' => 'Page Tab 2',
  22. 'access arguments' => array('administer site configuration'),
  23. 'page callback' => 'tabs_edit',
  24. 'type' => MENU_LOCAL_TASK,
  25. );
  26. return $items;
  27. }
  28. /**
  29. * Callback tabs_list
  30. */
  31. function tabs_list(){
  32. return t('Страница Tab 1');
  33. }
  34. /**
  35. * Callback tabs_edit
  36. */
  37. function tabs_edit(){
  38. return t('Страница Tab 2');
  39. }

После чего вы увидите свой раздел на странице «Конфигурация». Думаю, с созданием табов для своего модуля у вас не должно возникнуть проблем.

Скачать модуль, который был в примере можно здесь

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.