これは と非常によく似ています。ユーザーや検索エンジンから直接アクセスしてはならないノードを非表示にするにはどうすればよいですか?
私はしたいと思います:
私の質問は:
編集:Drupal 7.を使用します。
ありがとう!
ノードを公開しないと、進行中の作業ができないか、Webサイトの準備ができていないものとしてマークする別の方法が必要になります。これは間違いなく不利だと思います。
401ではなく403または404を意味しますか?ページの結果が404の場合、そのページはクロールまたはインデックスされません。 Googleには、「見えないノード」のケースを、従来の不正なURLと区別する方法がありません。 401は承認の場合にのみ発生します。 403を指定すると、後でページが改訂される可能性があります。これらのいずれかからリダイレクトする必要はありません。これには、301または302が必要です。
レガシープロジェクトでこれを行う別の方法として、パスエイリアスを次のように設定できます。
no-view/[nid]
次に使用します
function MYMODULE_init ()
{
$path = drupal_get_path_alias(request_uri());
if (strpos($path, "no-view/") !== false) {
drupal_not_found();
exit;
}
}
カスタムモジュールで。 hook_init()の追加を避けたい場合は、Node APIを介して同様の機能を配線できます。
今後は、@ nicozの提案に従ってエンティティを使用するのが最善の方法です。
Drupal 7のアーキテクチャレベルでの最大の変更の1つは、コンテンツの抽象化としてのエンティティの導入です。ノード内のすべてを詰め込もうとする昔は終わりました。要するに、オーバーヘッドと不要なコードなしのノードのすべての便利さ(そして、あなたの場合、ユーザー、クローラーからノードを「隠す」というアーキテクチャ上の課題)。
Drupal Commerceはそれらを製品に使用します。これにより、エンドユーザーは製品自体にアクセスできなくなりますが、エンドユーザーが表示および購入できるように製品のディスプレイおよびビューに接続できます。
エンティティを利用する 建設キット(ECK) 。これは、エンティティを作成するための素晴らしいUIを提供し、ビューを使用してエンドユーザーにエンティティを表示します。
Internal Nodes モジュールは、私が自分でテストしたわけではありませんが、望みどおりの動作をするはずです。
私の唯一の問題は、非表示にしたノードを編集できないことですが、現在作業中です( ユーザーが表示できないノードを編集/削除できるようにする )
Rabbit Hole モジュールはこれに最適です。アクセス可能なノードを非表示にしたり、別のランディングページに一度リダイレクトしたりできます。 「管理者」の役割を選択して、それらに通常アクセスし、他のすべてのユーザーはコンテンツタイプごとにその一般的なルールに従う必要がありますが、ノードごとにこれを変更することもできます。
サイトのどこにもこれらのノードにリンクしていない場合、検索エンジンはそれらを見つけることすらできません。
より堅牢なアプローチは、フックバーノードアクセスを使用する Berdirの提案 です。