Вот основная структура меню, с которой я работаю:
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/%
. Но когда вы посещаете его, я хочу, чтобы две вкладки оставались видимыми, а текущие события активными, как будто мы никогда не покидали эту страницу.