2011-02-10 9 views
0

最近、DrupalのモジュールInviteSupportを評価する際に、デフォルトのタブナビゲーションがユーザーフレンドリーではないことが分かりました。特に、各モジュールには、招待状やサポートチケットのさまざまなカテゴリ(保留、キャンセルなど)を示すタブのページがあります。開発者にとっては、すべてのタブを事前に定義するのが最も簡単ですが、ユーザーの観点からは、コンテンツを含むタブのみを提示する方が理にかなっています。Drupalに表示されたメニュータブのみを表示する方法は?

クエリを実行して、特定のユーザーに表示するタブを確認し、hook_menu_alterを使用してメニューを変更することができます。しかし、Drupalのメニューキャッシュに問題が発生する可能性がありますか?より良い方法がありますか?

答えて

1

jhedstromによって答えが正しいですが、私は動的にローカルタスクの結果を表示/非表示のことを確信していないことより良いUX、それは私にちょっと混乱しているようです。

私の提案は、同じフック_メニュー_アルター()で追加することができ、その特定のタブの中にあるものの数を表示することです(これは私が例としてPrivatemsgで番号を表示するために使用します未読メッセージの。

一般のタイトルコールバックの詳細については、例えばprivatemsg_title_callback()hook_menuを参照してください。

+0

おかげで、私はおかしいが、私たちはあまりにもPrivatemsgを追加するプロセスにいる!そのアイデアが好き、私はHADNまだその機能に気づいていません。 –

1

動的にタブを選択的に削除したい場合(例えば、あるノードがタブを取得し、別のノードがタブを取得しない場合)、hook_menu_alter()を使用することはできません。これは、メニューキャッシュが構築されています。ただし、メニューアクセスコールバックをオーバーライドすることでこれを行うことができます。タブへのアクセスが拒否された場合、そのタブは表示されません。

は例えば、ノード]タブを無効にするには、このような何かを行う可能性があります:

function mymodule_menu_alter(&$items) { 
    $item['node/%node/foo']['access callback'] = 'mymodule_override_access'; 
} 

function mymodule_override_access($node) { 
    // Perform queries, logic, etc to determine if content exists at node/nid/foo. 
    // Return false if there is no content, otherwise fall through to the original 
    // access callback function. 
} 
関連する問題