Вот основная структура меню, с которой я работаю:
function events_menu()
{
$items = array();
$items['events'] = array(
'title' => 'Current Events',
'access callback' => true,
'page callback' => 'page_event',
'type' => MENU_CALLBACK,
);
$items['events/current'] = array(
'access callback' => true,
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 1,
);
$items['events/regions'] = array(
'title' => 'Event By Region',
'access callback' => true,
'type' => MENU_LOCAL_TASK,
'weight' => 2,
);
$items['events/range/%/to/%'] = array(
'title' => 'Current Events by Range',
'access callback' => true,
'page callback' => 'page_event_range',
'page arguments' => array(2, 4),
'type' => MENU_LOCAL_TASK,
/* Don't want this to be a tab.
I want it to activate the default tab */
);
return $items;
}
URL (и вкладка по умолчанию) events
отображает некоторые данные. Мне бы хотелось, чтобы URL events/range/%/to/%
фильтровал данные на основе переданных параметров URL.
Меню hook_menu выше работает, но я не хочу, чтобы events/range/%/to/%
была его собственной вкладкой. Когда вы используете отфильтрованный URL-адрес, я хочу, чтобы вкладка по умолчанию «Текущие события» оставалась активной - чтобы создать иллюзию того, что вы смотрите на той же странице, что и events
, только с фильтром. Могут ли несколько URL указывать на одну и ту же вкладку?
Полагаю, я мог бы вручную обработать параметры URL-адреса с помощью arg()
в обратном вызове events
, но это выглядит странно. Разве нет способа сделать это с помощью hook_menu?
Изменить (указано более четко):
Обычно есть две вкладки «Текущие события» и «События по регионам» по URL events
и events/regions
. Я хочу скрытый (только обратный вызов) URL на events/range/%/to/%
. Но когда вы посещаете его, я хочу, чтобы две вкладки оставались видимыми и текущие события были активными - как если бы мы никогда не покидали эту страницу.