1

これが私が取り組んでいる基本的なメニュー構造です。

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にはいくつかのデータが表示されます。events/range/%/to/%渡された URL パラメーターに基づいてURL でデータをフィルター処理したいと思います。

events/range/%/to/%上記の hook_menu は機能しますが、独自のタブにはしたくありません。フィルタリングされた URL を使用するときは、デフォルトのタブである [現在のイベント] をアクティブのままにして、フィルタリングされたものと同じページを見ているように見せたいと思いますevents。複数の URL が同じタブを指すことはできますか?

arg()ページのコールバックでURL パラメータを手動で処理できると思いeventsますが、これはハックのようです。hook_menu を使用してこれを行う方法はありませんか?

編集 (より明確に記述):
通常、URLeventsとに [Current Events] と [Event By Region] の 2 つのタブがありますevents/regions。に非表示 (コールバックのみ) の URL が必要events/range/%/to/%です。しかし、あなたがそこにアクセスしたときに、2 つのタブが表示されたままになり、Current Events がアクティブになっていることを望みます。まるでそのページを離れたことがないかのように。

4

3 に答える 3

1

フックメニューだけでやりたいことが実現できるとは思えません。menu_set_active_trailユーザーがページを見ているように見えるように drupal を作成するために使用できること/events

上記の方法は Drupal 7 でのみ機能する可能性があります

Drupal 6 の場合、変更でき$_GET['q']ます。ただし、これは purl や globalredirect などの一部のモジュールと競合する可能性があります。これはきれいな解決策ではありませんが、機能します。これを行うのに最適な場所は、を使用するカスタム モジュールですhook_init

于 2011-01-17T09:03:37.630 に答える
0

「コンテキスト」モジュールを試しましたか。アクティブなメニューに必要なパス パターンを設定できます。この簡単なビデオ デモをご覧ください。

于 2011-01-19T04:40:05.140 に答える
0

MENU_LOCAL_TASK の代わりに MENU_CALLBACK を使用すると、タブが消えます。次に、現在のメニュー項目を次のように「イベント」に設定します (hook_init でのみ機能する可能性がありますが、ページ コールバックでも試すことができます:

$item = menu_get_item();
$item['href'] = 'events';
menu_set_item(NULL, $item);
于 2011-01-17T15:20:41.497 に答える