現在のユーザーが特定の権限を持っている場合、メインメニューからリンクを非表示/表示する方法を探しています。メニュー項目はすでに作成されており、メニュー項目はhook_node_access()によって制御されるノードにリンクしています。
現在のユーザーが特定の権限を持っている場合、メインメニューからリンクを非表示/表示する方法を探しています。メニュー項目はすでに作成されており、メニュー項目はhook_node_access()によって制御されるノードにリンクしています。
回答:
デフォルトでは、Drupalはユーザーがアクセスできないすべてのメニュー項目を非表示にするため、最も簡単な方法は、メニュー項目がリンクしているページに対して選択したアクセスを要求することです。
node_access
アクセス権を取得するためにタグ付きの選択クエリを使用していることがわかります。したがって、単に実装hook_node_access()
するだけではそれはできません。
あなたにできることは使って「ノード/%ノード」に関連付けられたアクセスコールバックを変更することである)(hook_menu_alterをし、その後のコードであなたのアクセスコールバック基点のためのコードを書く)(node_access。まだ処理したい特定のケースがありますnode_access()
。たとえば、「ノードアクセスのバイパス」権限を持つユーザーは、常にノードにアクセスします。
function mymodule_menu_alter(&$items) {
if (isset($items['node/%node'])) {
$items['node/%node']['access callback'] = 'mymodule_node_access';
}
}
アクセスコールバックは、リンクを表示できるユーザー、およびユーザーがブラウザーのアドレスバーに直接URLを書き込んだときにページにアクセスできるユーザーを決定することを考慮してください。
drupalモジュールmenu_item_visibilityを検討することができます
プロジェクトページを引用するには:
たとえば、/ userを指す「マイアカウント」リンクを作成する場合、匿名ユーザーと登録ユーザーの両方が/ userパスにアクセスできるため、匿名ユーザーが技術的にアカウントを持っていない場合でも、両方にリンクが表示されます。このモジュールを使用すると、「マイアカウント」リンクのみを登録ユーザーに表示し、匿名ユーザーには非表示にすることができます。
モジュールは、ブロックの表示設定に使用されているものとまったく同じUIを使い慣れています。
またはmenu_viewsモジュール-メニュー生成へのビューベースのアプローチを提供します(ユーザーに基づいて含めると思います)