web-dev-qa-db-ja.com

匿名ユーザーへのアクセスを制限してメニュー項目を表示する

コンテンツへのアクセスを設定するために Private モジュールを使用するWebサイトを持っています。もちろん、一部のページにはメニュー項目があります。ページを非公開に設定すると、適切な権限を持つユーザーだけがそれを見ることができます。これは素晴らしいことであり、私が望んでいたことです。

しかし、メニュー項目に少し問題があります。それらに割り当てられたコンテンツが公開されていない場合(つまり、それらに割り当てられたページが非公開である場合)は表示されません。これは問題ありませんが、引き続きこれらの項目を表示できるようにしたいと思いますナビゲーションで、ユーザーがそれらをクリックすると、ログインページに移動し、その特定のページを表示するために詳細を入力するように求めます。

したがって、基本的には、メニュー項目の動作を変更して、Webサイトの匿名の登録済みメンバーに常に表示されるようにしますが、それらをクリックすると、ページが表示されます(ログインしている場合) in)またはログインページにリダイレクトされる(匿名の場合)

私は this solution を見つけました。そのようなページがたくさんあるので、これは私にとって最良の方法ではないので、より良いアプローチを探しています。私も試しました メニュー項目の可視性 モジュールですが、それも役に立ちませんでした!

どうすればこれを達成できますか?

ルカ

9
Luca

あなたの問題はかなり一般的です。

Drupal 6 and 7 and 8: http://drupal.org/node/300607

Drupal 6(および7)では、ユーザーがアクセスできないメニュー項目を表示する機能が削除されました。ただし、ユーザーがメニュー項目にアクセスできない場合でも、メニュー項目を表示することが望ましい場合があります。たとえば、403が表示されるときに認証を取得しようとする認証メカニズムを使用する場合でも、ユーザーがログインするための資格情報を提供する機会を得られるように、メニュー項目を表示する必要があります。

Drupal 7の解決策はここにあります: http://drupal.org/node/300607#comment-4450062

準備ができているモジュールを好む場合-ここからダウンロードできます https://github.com/systemseed/always_visible

4
Eugene Fidelin

同様の状況で、ページをメニューシステムに表示する必要がありましたが、コンテンツはログインしたユーザーにのみ表示されます。最終的な解決策は非常に単純で、引き続き機能します。

ノードテンプレートは、コンテンツへのアクセスを制御する代わりに、ユーザーがログインしているかどうかを確認します。ログインしている場合は、コンテンツを表示します。そうでない場合は、ログインまたは登録するためのリンクを含むテキストが表示されます。

それらは自動的にリダイレクトされないため、それが重要である場合、これは解決策ではありません。

一言で言えばコード:

<?php  
global $user;       
if ( $user->uid ) :
print render($content);
// or in some situations, display a view;
else : 
print 'Please <a href="/user/login">log in</a> or <a href="/user/register">register</a> etc etc.'
endif; 
?>
1
keva