Как сделать вкладки у своегно модуля?

Главные вкладки

Аватар пользователя Lavio Lavio 7 ноября 2012 в 14:35

Нужно чтобы в панели админки был начальный пункт назовем его "мой модуль" в нем было еще 2 подпункта "Подпункт 1" и "Подпункт 2". Так вот при нажатии на пункт "мой модуль" нужно чтоб выводилась страничка подобная "Структура"->"Меню" с двумя вкладками "Подпункт 1" и "Подпункт 2", по умолчанию должна быть открыта первая.

Пробовал делать так:

<?php
function ex_mod_menu() {
  
$items = array();
  
$items['admin/ex_mod/ul'] = array(
   
'title' => 'Подпункт 1',
    
'description' => 'Описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_pp1'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_DEFAULT_LOCAL_TASK
  
);
  
$items['admin/ex_mod/del'] = array(
   
'title' => 'Подпункт 2',
    
'description' => 'Описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_pp2'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_LOCAL_TASK
  
);
  return 
$items;
}
?>

Появляется "Подпункт 2" в основном меню админки, там где должен быть "мой модуль". Однако, вверху справа появляются 4 вкладки

Задачи (перечислены все начальные пункты админского меню "содержимое", "структура"..."отчет", "справка",
индекс (общая панель настроек всех модулей,
Подпункт 1 тоже самое что и в "Задачи",
Подпункт 2 содержимое то какое должно быть.

До этого был просто один пункт и все нормально работало.

<?php
function ex_mod_menu() {
  
$items = array();
  
$items['admin/ex_mod'] = array(
   
'title' => 'Мой модуль',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod'),
    
'access arguments' => array('access administration pages'),
  );
  return 
$items;
}
?>

Я понимаю, что для того чтобы ссылка "мой модуль" была в основном меню ее нужно прописать в коде, но как это сделать чтоб она была одновременно и пунктом в меню админки, и вкладкой, также была вторая вкладка?

Комментарии

Аватар пользователя boatsman boatsman 7 ноября 2012 в 16:10

3 пункта меню у Вас должно быть, вот эти первых два, плюс тот что в конце, тот что в конце должен быть с 'type' => MENU_CALLBACK,

Аватар пользователя Lavio Lavio 7 ноября 2012 в 18:28

boatsman wrote:
3 пункта меню у Вас должно быть, вот эти первых два, плюс тот что в конце, тот что в конце должен быть с 'type' => MENU_CALLBACK,

Благодарю за ответ! Все работает) Только небольшое дополнение: нужно заменить MENU_DEFAULT_LOCAL_TASK на MENU_LOCAL_TASK иначе будет не тот пункт первым или вообще на обоих пунктах будет одна форма.
Остался маленький вопросик:
Как сделать чтобы два подпункта были еще и в выпадающем списке админ меню? То есть наводишь мышкой выпадаю 2 пункта.

Аватар пользователя Lavio Lavio 7 ноября 2012 в 18:39

Lavio][quote=boatsman wrote:
3 пункта меню у Вас должно быть, вот эти первых два, плюс тот что в конце, тот что в конце должен быть с 'type' => MENU_CALLBACK,

Благодарю за ответ! Все работает, но немного не так как надо)
Конечный код:

<?php
function ex_mod_menu() {
  
$items = array();
  
$items['admin/ex_mod'] = array(
   
'title' => 'Мой модуль',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_ul'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_CALLBACK
  
);
  
$items['admin/ex_mod/ul'] = array(
   
'title' => 'Подпункт 1',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_ul'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_LOCAL_TASK
  
);
  
$items['admin/ex_mod/smf'] = array(
   
'title' => 'Подпункт 2',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_smf'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_LOCAL_TASK
  
);
  return 
$items;
}
?>

Имеем:
В меню админки отображается и "Подпункт 1" и "Подпункт 2", самого пункта "Мой модуль" нет.
Как сделать чтоб в админке отображался на основном уровне только "Мой модуль", а два подпункта были в его выпадающем списке. То есть наводишь мышкой на "Мой модуль" выпадают 2 пункта и при этом они оставались вкладками.

Аватар пользователя sg85 sg85 7 ноября 2012 в 20:56

MENU_CALLBACK означает, что данный адрес по умолчанию не имеет прямых ссылок в меню, попробуйте сменить на MENU_NORMAL_ITEM, правда в этом случае у вас admin/ex_mod/ul будет дублем admin/ex_mod, либо измените вывод в admin/ex_mod, либо откажитесь от этой идеи.

Аватар пользователя Lavio Lavio 7 ноября 2012 в 21:48

sg85 wrote:
MENU_CALLBACK означает, что данный адрес по умолчанию не имеет прямых ссылок в меню, попробуйте сменить на MENU_NORMAL_ITEM, правда в этом случае у вас admin/ex_mod/ul будет дублем admin/ex_mod, либо измените вывод в admin/ex_mod, либо откажитесь от этой идеи.

Мдаа... после замены MENU_CALLBACK на MENU_NORMAL_ITEM есть все три пункта в меню админки, но на одном уровне.
Хорошо как можно реализовать 2 подхода по отдельности?
1) Пункт "Мой модуль" в меню адмики. В нем выпадающим способом появляются 2 подменю, которые ведут на свои странички с формами без вкладок.
2) Один Пункт меню "мой модуль", который открывает 1 страничку с 2 вкладками "мой модуль" и "подпункт 2". При этом в меню админки есть только 1 пункт "мой модуль".

Аватар пользователя sg85 sg85 7 ноября 2012 в 22:49

Вообще по уму делается так:

function ex_mod_menu() {
  $items = array();
  $items['admin/ex_mod'] = array(
   'title' => 'Мой модуль',
    'description' => 'описание',
    'position' => 'left',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ex_mod_ul'),
    'access arguments' => array('access administration pages'),
    'type' => MENU_CALLBACK
  );
  $items['admin/ex_mod/ul'] = array(
   'title' => 'Подпункт 1',//Название самого таба
   'type' => MENU_DEFAULT_LOCAL_TASK,//Дефолтный таб
   'weight' => -10,//Делаем его 1м
  );
  $items['admin/ex_mod/smf'] = array(
   'title' => 'Подпункт 2',
    'description' => 'описание',
    'position' => 'left',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ex_mod_smf'),
    'access arguments' => array('access administration pages'),
    'type' => MENU_LOCAL_TASK
  );
  return $items;

но, честно говоря хз как он себя поведет в случае с admin menu

Аватар пользователя Lavio Lavio 8 ноября 2012 в 9:37

sg85 wrote:
Вообще по уму делается так:
...
но, честно говоря хз как он себя поведет в случае с admin menu

Я сделал так:


<?php
function ex_mod_menu() {
  
$items = array();
  
$items['admin/ex_mod'] = array(
   
'title' => 'Мой модуль',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_ul'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_CALLBACK
  
);
  
$items['admin/ex_mod/ul'] = array(
   
'title' => 'Подпункт 1',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_ul'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_LOCAL_TASK
  
);
  
$items['admin/ex_mod/smf'] = array(
   
'title' => 'Подпункт 2',
    
'description' => 'описание',
    
'position' => 'left',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_smf'),
    
'access arguments' => array('access administration pages'),
    
'type' => MENU_LOCAL_TASK
  
);
  return 
$items;
}
?>

Если писать MENU_DEFAULT_LOCAL_TASK вместо MENU_LOCAL_TASK то подпункт скрывается в выпадающем меню. Если делать оба пункта MENU_LOCAL_TASK то при переходе по пункту 'Мой модуль' открывается 'Подпункт 1' и он не подсвечен белым вверху справа во вкладках. Да, кстати, разницу между параметрами MENU_CALLBACK и MENU_NORMAL_ITEM для пункта 'Мой модуль' не заметил ведет себя абсолютно одинаково в обоих случаях. И если исключать строчки

<?php
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('ex_mod_ul'),
    
'access arguments' => array('access administration pages'),?>

из первого подпункта то разницы, с вариантом оставить их, также не будет при параметре MENU_DEFAULT_LOCAL_TASK. При параметре MENU_LOCAL_TASK и исключенных строчках исчезают вкладки.