При разработке своих модулей, практически всегда встает вопрос о структуре параметров (настроек) модуля. Решением в Drupal 7 стало использование табов, которые содержат ссылки на необходимые страницы настроек данного модуля. Что бы вы более четко понимали о чем я говорю, посмотрите на скриншот ниже:
Здесь, как вы видите, представлены табы для управления и отображения полями своего типа материала.
Как создать нечто подобное для административных страниц своего модуля, я вам сейчас продемонстрирую. Итак, допустим у нас есть некий модуль, назовем его «tabs», который имеет две страницы администрирования, что они будут в себе нести, в данном случае неважно. Если вы хотите повторить урок за мной, то вот исходный код модуля:
tabs.info
name = Tabs description = Example Tabs administration page package = Other core = 7.x
tabs.module
/** * Implements hook_menu */ function tabs_menu(){ 'title' => 'Settings for module tabs', ); 'title' => 'Page Tab 1', 'page callback' => 'tabs_list', ); 'title' => 'Page Tab 2', 'page callback' => 'tabs_edit', ); return $items; } /** * Callback tabs_list */ function tabs_list(){ return t('Страница Tab 1'); } /** * Callback tabs_edit */ function tabs_edit(){ return t('Страница Tab 2'); }
После активации данного модуля, вы увидите дополнительный раздел на странице администрирования, где вам будут доступны 2 ссылки:
Хочу заметить, что данный раздел был сформирован Drupal автоматически, исходя из URL страниц, а так же дефолтного их состояния. После создания табов, данного раздела не будет!
Но если вы перейдете по ним, то естественно никаких табов вы не увидите:
Теперь, давайте это дело исправлять. Создание табов можно разделить на 3 этапа:
- Создание родительской страницы
- Создание дефолтного таба, именно этот таб будет активен, при переходе на родительскую страницу
- Все остальные табы, которые должны быть доступны.
За родительскую страницу у нас отвечает, как вы наверное поняли по коду, страница с URL
admin/config/tabs
За дефолтный таб, мы возьмем URL
admin/config/tabs/tab1
Ну а третий URL, будет как дополнительный таб:
admin/config/tabs/tab2
Для определения дефолтного таба, мы должны задать ему тип:
MENU_DEFAULT_LOCAL_TASK
Для определения другого таба, мы должны задать тип:
MENU _LOCAL_TASK
А так же допишем callback для родительской страницы, в качестве используемой функции, возьмем функцию дефолтного таба, а именно
tabs_list()
Теперь допишем все изменения в функцию tabs_menu:
/** * Implements hook_menu */ function tabs_menu(){ 'title' => 'Settings for module tabs', 'page callback' => 'tabs_list', ); 'title' => 'Page Tab 1', 'type' => MENU_DEFAULT_LOCAL_TASK, ); 'title' => 'Page Tab 2', 'page callback' => 'tabs_edit', 'type' => MENU_LOCAL_TASK, ); return $items; }
После чего чистим кеш сайта и переходим по адресу:
admin/config/tabs
и смотрим что получилось:
Как видим, мы добились того, что нам было необходимо.
Если же вам необходим свой раздел администрирования на странице
admin/config
То вам достаточно зарегистрировать новый URL, с уровнем (аргументом) URL выше, например ваш файл tabs.module может выглядеть так:
/** * Implements hook_menu */ function tabs_menu(){ 'title' => 'Settings for module My tabs', ); 'title' => 'Settings for module tabs', 'page callback' => 'tabs_list', ); 'title' => 'Page Tab 1', 'type' => MENU_DEFAULT_LOCAL_TASK, ); 'title' => 'Page Tab 2', 'page callback' => 'tabs_edit', 'type' => MENU_LOCAL_TASK, ); return $items; } /** * Callback tabs_list */ function tabs_list(){ return t('Страница Tab 1'); } /** * Callback tabs_edit */ function tabs_edit(){ return t('Страница Tab 2'); }
После чего вы увидите свой раздел на странице «Конфигурация». Думаю, с созданием табов для своего модуля у вас не должно возникнуть проблем.
Скачать модуль, который был в примере можно здесь