web-dev-qa-db-ja.com

匿名ユーザーのみにメニュー項目を表示するにはどうすればよいですか?

匿名ユーザーのみのメインメニューに[今すぐ参加]タブを表示したい。

以前、私は ロールごとのメニュー モジュールを使用しました。

タブは1つしかないので、5行または10行のコードを使用します。どのフックを使用する必要がありますか?現在のユーザーロールを確認してメニュー項目を追加する(またはログインしているユーザーに対して非表示にする)機能は何ですか?

6
uwe

メニューリンクが指すパスの_access callback_をオーバーライドするのが最も簡単な方法だと思います。 hook_menu_alter()を使用してカスタムモジュールでこれを行うことができ、コールバック関数としてuser_is_anonymous()を使用します。

_function MYMODULE_menu_alter(&$items) {
  $items['path/to/page']['access callback'] = 'user_is_anonymous';
}
_

このパスにメニューリンクを追加すると、Drupalのメニューシステムはアクセスコールバックを尊重し、ログインしているユーザーにはリンクが表示されません。

この方法を使用すると、ログインしているユーザーがページに直接アクセスできないことも確認できます。これはおそらく良いことです。

10
Clive
  1. ビューを作成し、匿名のみに表示を許可する
  2. ノードアクセスモジュールを使用して権限を設定する
  3. 匿名ユーザーのみが表示できるコンテンツの新しいコンテンツタイプを作成します。そのコンテンツを表示する権限を持つ唯一のものとして匿名を設定します。
  4. そのページだけのカスタムモジュールを作成します。

3は私の選択したアプローチです。将来、追加の非メンバーコンテンツが必要になった場合に備えて、タイプを配置するという考えが気に入っています。

7
Aaron Ortega