Несколько URL-адресов, указывающих на одну и ту же вкладку в hook_menu - PullRequest
1 голос
/ 17 января 2011

Вот основная структура меню, с которой я работаю:

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

Ответы [ 3 ]

1 голос
/ 17 января 2011

Я не думаю, что можно выполнить то, что вы хотите, только с помощью меню хуков.Что бы вы могли сделать, используйте menu_set_active_trail, чтобы заставить drupal создать вид, что пользователи смотрят на страницу /events.

Приведенный выше метод может работать только для Drupal 7

Для Drupal 6 вы можете изменить $_GET['q'].Это может, однако, конфликтовать с некоторыми модулями, такими как purl или globalredirect.Это не симпатичное решение, но оно работает.Лучшее место для этого - пользовательский модуль, использующий hook_init.

0 голосов
/ 19 января 2011

Вы пробовали модуль 'context'.Вы можете установить шаблон пути, который вы хотите для активного меню.Проверьте это краткое видео демо.

0 голосов
/ 17 января 2011

Используйте MENU_CALLBACK вместо MENU_LOCAL_TASK, и вкладка исчезнет.Затем установите текущий пункт меню на «события», например, так (может работать только в hook_init, но вы можете попробовать это и в обратном вызове страницы:

$item = menu_get_item();
$item['href'] = 'events';
menu_set_item(NULL, $item);
...