だから、最初に、私は見ました:
これらの質問に対するすべての回答は、ノードを非公開にするという提案を作成します。これは、いくつかのコンテンツタイプをスライドショーでのみ表示するように作成している、つまりwww.mysite.com/node/40
に他のブロックのスライドショーを構成するすべての未加工画像のリストは、私が欲しかったものではありませんでした。スライドショーのコンテキスト内でのみ画像を表示したい。
ただし、これらの回答に従ってノードのコンテンツを非公開にすると、そのコンテンツはスライドショービューにアクセスできなくなりました。匿名の閲覧者にとっては空白になりました。ノードを非公開にする方法で見逃したものはありますが、それでもブロックとしてビューからそのコンテンツにアクセスできるようにしますか?
私は、上記のリンクで言及したhtaccess、フック、またはjavascriptオプションを使用せずにこれを実行しようとしています。
nodes/123
の下でコンテンツのリストに裸でアクセスできるようにすることは、実際には意図的な機能であるとは思えません。
これを厄介な問題にするもう1つの条件-node/123
へのアクセスを妨げる方法はありますが、ノードを作成または編集する独自の能力を妨げる可能性もあります!
EDIT:NEVERMIND、THIS DID NOT WORK!
コンテンツの編集は「/ node/add/...」の下にあるため、管理者がコンテンツを作成および編集できるように追加できるアクセスルールがあることがわかりましたまた、匿名ユーザーのアクセス制限を解除し、すべてのユーザーがコンテンツを表示できるようにしました。私が始めた場所のようなものですが、誰かが道を見るために役立つように、これを残しておきます。元の答えは次のとおりです:
わかりました。これは、プログラムを使用しない方法でこれを実現するための簡単な方法です(次の理由の説明)。
根拠:
潜在的な落とし穴:
新しいコンテンツタイプを作成する場合は、ページマネージャーに戻って更新することを忘れないでください(つまり、2番目の選択ルールのボックスをオンにします)。
今後の改善:
誰かが本当にクールな人なら、彼らはこのプロセスを自動的に行う単一のモジュールを作り、それを「ノードを隠す」と呼ぶでしょう。 =)繰り返しますが、 "nodes /"をデフォルトで非表示にしたいと思いますDrupal動作、そして私だけではないことを確信しています。これらをステージングおよびコレクション領域と実際に見なしています- -彼らが一般に公開されるのを許可するのは非常に奇妙に思えます。まるで魔術師が鳩を袖に突き刺すのを見るようなものです!
チャンスGが私を指さしてくれてありがとう、そしてJohan Falkが tutorial を出してくれてありがとう!
編集:UPDATE
上記から、私はこの質問への答えはこれを行う方法はないと言います。ノードに行き詰まっています!
Nodeone.seのJohan Falkが最近、Page Manager(非常に一般的なモジュールであるcToolsの一部)で優れたビデオシリーズを行い、あなたが非常によく説明しているようなユースケースを取り上げました。 リンク 。
基本的には、ページマネージャーでバリアントを設定し、目的の宛先にリダイレクトするための応答をhttp要求コード(おそらくこの場合は301)にします。彼の例では(シリーズの2番目または3番目のビデオだったと思いますが、どれもかなり高速です)、ノード参照を使用していて、誰も「サブノード」に到達することを望まず、親にリダイレクトしましたノードにアクセスしようとした場合。ユースケースはもっと単純なように聞こえますが、正しい完全なスライドショーを表示するページにリダイレクトされたスライドショーノードの1つにアクセスしようとする人がいるだけです。
この魔法のすべてを機能させるためにパネルは必要ありません。また、関連ノードをロードするためにノード参照などがインストールされている場合、リダイレクトルールがかなり複雑になる可能性があります。
それが検索エンジンのアクセシビリティの問題である場合は、検索エンジンがサイトの特定のページにアクセスできないようにする robot.txt ファイルを使用する必要があります。
これを使用しても、サイトのユーザーは、例www.mysite.com/node/40のようにURLにアクセスできます。
誰もコードの答えを出していないので、ここに別のオプションがあります:
/**
* Implements hook_init().
*/
function HOOK_init() {
$object = menu_get_object();
$action = arg(2);
if(isset($object->type) && $object->type == 'TYPE_OF_NODE' && (empty($action) || $action == 'view')) {
drupal_goto();
}
}
HOOK
をモジュールの名前に置き換え、TYPE_OF_NODE
を非表示にするノードのタイプの名前に置き換えます。
これは、パスがnode/123
またはnode/123/view
の場合にのみリダイレクトされます。 node/123/edit
またはnode/123/whatever
を使用できます。これはパスであり、私が話しているURLではありません。ノードのパスエイリアスはここでは関係ありません。
Rules モジュールを使用すると、次のようなルールを実装できます。
{ "rules_check_url" : {
"LABEL" : "Disallow node/* access",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "init" : [] },
"IF" : [
{ "text_matches" : {
"text" : [ "site:current-page:url" ],
"match" : "node\/\\d+$",
"operation" : "regex"
}
}
],
"DO" : [
{ "drupal_message" : {
"message" : "Sorry, URLs like [site:current-page:url] are not allowed around here ...",
"type" : "error"
}
},
{ "redirect" : { "url" : "no_access" } }
]
}
}
node/...
のようなURLを使用しているユーザーは、パスno_access
を持つページにリダイレクトされます(ニーズに合わせてそのパスを調整します)。
上記のルールでは、(まだ)選択されたロール(匿名ユーザーなど)のみに「アクション」を適用することは考慮されていません。しかし、Rulesモジュールに少し慣れている人にとっては、追加するのは簡単な「条件」です...ノードの限られたリスト(数個)へのそのようなアクセスのみを防止したい場合は、使用する必要はありません。 「text_matches」条件での「regex」操作(関連するノードの完全一致と置き換えるだけです)。
独自のサイトでこのルールを試すには、上記のルールコード全体をコピーして、「インポート」機能で作成した独自のサイトの新しいルールに貼り付けます。次に、さらに編集/調整して、自分の環境に合わせます(たとえば、「Sorry、...」メッセージが表示されます)。
注意:このルールは、質問のタイトルから「完全に」の部分を真剣に受け止めます...このルールを有効にして(追加のルール条件を追加しない場合のみ)選択したルールに適用)、管理者(またはuser/1 ...)でもnode/...
のような(繰り返し:任意の)URLにアクセスできなくなります。これを回避する唯一の方法は、このルールを(一時的に)無効にし、関連するルール条件を追加して(とにかく選択したロールを許可する)、ルールを再度有効にすることです。