Drupal 6の不正なコンテンツへのメニューリンクを「再表示」するにはどうすればよいですか?
質問
Drupal 6メニューモジュールは、現在のユーザーがアクセスする権限を持っていないコンテンツへのリンクを非表示にします。これは理にかなっていますが、リンクを表示して「このコンテンツを表示する権限がありません」ページに移動したい場合があります(マーケティング目的など)。
これらのリンクを表示する簡単な方法はありますか? Drupalの以前のバージョンでは、許可されていないページへのリンクを隠すために、モジュールをダウンロードする必要が実際にあったことを理解しています!
解決 7
実際に必要な機能を提供しているように見えるモジュールを見つけました:
これは非常に簡単です。各ノード作成ページ内にセレクターを追加するだけで、そこにアクセスするロールを選択できます。まだメニューリンクが表示されない場合は、カスタムの「このページを表示するには登録する必要があります」ページが表示されます。テスト用のDrupalサイトにインストールしましたが、うまく機能しているようです。数週間前に見つけられなかったのは残念です!
他のヒント
常にそうでした(少なくとも4.7以降)。
許可されていないメニュー項目をすぐに再表示することはできません。ただし、特別なモジュールがあるかもしれません...
できることは、メニューのポイント先のページにリダイレクトする機能をメニューページが指すようにすることです。これは多くの点で理想的ではありませんが、リダイレクトを行う関数にすべてアクセスできるため、これは機能するはずです。作成したカスタムモジュールにこのコードを配置するだけです。
デフォルトのDrupalでこれを行う方法はありません。また、この機能を提供する貢献モジュールについては知りません。
これを行うには2つの解決策が思い浮かびます。簡単に。
-
最小限のコーディングでは、実際のメニュー項目を非表示にして非表示にし、ユーザーがアクセスできる場合は適切なメニュー項目にリダイレクトするPHPコードを含むページを作成し、しないでください。次に、ノードを指すメニュー項目を作成します。
-
より多くのコーディングが含まれますが、おそらくより堅牢になります。 hook_menu を使用して独自の基本モジュールを作成します。非特権ユーザーに表示するテキストを含む小さなメニューコールバック関数を含むメニュー項目。
多くのメニュー項目に対してこれを行いたい場合は、適切に管理するためのより柔軟なソリューションを見つける必要があります。
すべてのコンテンツがノードであると仮定すると、アクセスルールなしでメニューを保持してから使用することができます
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;
}