Drupal 6 メニュー モジュールは、現在のユーザーがアクセス権を持っていないコンテンツへのリンクを非表示にします。これは理にかなっていますが、リンクを表示して「このコンテンツを表示する権限がありません」ページに移動したい場合があります (マーケティング目的など)。
これらのリンクを表示する簡単な方法はありますか? Drupal の以前のバージョンでは、未承認のページへのリンクを非表示にするモジュールをダウンロードする必要があったことを理解しています。
すべてのコンテンツがノードであると仮定すると、アクセスルールなしでメニューを保持してから使用できます
hook_view($node, $teaser = FALSE, $page = FALSE)
特定のノードへのアクセスを拒否できます。
お役に立てば幸いです。
最終的に、「オープン」または「制限付き」コンテンツの分類法を作成し、これをテーマのヘッダーに入れることで、少し異なる方法でそれを行いました。
<?php
global $user;
//if the user is not logged in, and the node is in taxonomy term "restricted"
//redirect them to the login page
foreach ($node->taxonomy as $tax){
if ($tax->name == "Restricted" && !$user->uid){
$query = 'destination=node/'.$node->nid;
drupal_goto('please-login-continue',$query);
}
}
?>
/please-login は私が作成したページで、通常のログイン/サインアップ フォームがすべて含まれています。これまでのところ、私にとってはうまくいくようです!
注:人々がブラウザで意図的にリダイレクトを無効にすると、リダイレクトされませんが、Opera でリダイレクトをオフにして試してみると、ページはリダイレクトが発生しようとしていた時点まで読み込まれ、その後は何も読み込まれませんでした。この場合、コンテンツはまだ制限されていました。
ちょっと遅いですが、これは私がこれをどのように解決したかです:
/**
* Implementation of hook_menu()
*/
function mr_gm_menu() {
$items = array();
$items['x'] = array(
'title' => 'X',
'page callback' => 'x_view',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
'menu_name' => 'main-menu',
'weight' => 10,
);
return $items;
}
function x_view(){
global $user;
if ($user->uid):
drupal_goto('node/add/X');
else:
drupal_goto('user');
endif;
return;
}
できることは、メニューページが、メニューが指すページにリダイレクトする関数を指すようにすることです。これは多くの点で理想的ではありませんが、すべての人がリダイレクトを行う関数にアクセスできるため、これは機能するはずです。このコードを作成したカスタム モジュールに入れるだけです。
常にそうでした (少なくとも 4.7 以降)。
許可されていないメニュー項目をすぐに再表示することはできません。特別なモジュールがあるかもしれませんが...
デフォルトの Drupal でこれを行う方法はありません。この機能を提供する提供されたモジュールを私は知りません。
これを簡単に行うには、2 つの解決策が思い浮かびます。
最小限のコーディングでは、実際のメニュー項目を非表示にして非表示にし、ユーザーがアクセスできる場合は適切なメニュー項目にリダイレクトする PHP コードを含むページを作成し、そうでない人には他のテキストを表示します。次に、ノードを指すメニュー項目を作成します。
より多くのコーディングが必要ですが、おそらくより堅牢になります。非特権ユーザーに表示するテキストを含む小さなメニュー コールバック関数と共に、実際のメニュー項目への反対のアクセス チェックを持つhook_menuを使用して、独自の基本モジュールを作成するだけです。
多くのメニュー項目に対してこれを行いたい場合は、それを適切に管理するためのより柔軟なソリューションを見つける必要があります。
必要な機能を実際に提供しているように見えるモジュールを見つけました。
http://blog.davereid.net/content/restricted-content-yet-another-different-drupal-node-access-module
それは非常に簡単です。各ノード作成ページ内にセレクターを追加するだけで、どのロールがそれにアクセスできるかを選択できます。そうでない場合でもメニュー リンクが表示され、カスタムの「これを表示するには登録する必要があります」ページが表示されます。Drupal のテスト サイトにインストールしましたが、問題なく動作しているようです。数週間前に見つけられなかったのは残念です!