ノードのコンテンツを完全に隠し、Drupal内での使用を維持する方法は?


7

だから、最初に、私は見ました:

これらの質問に対するすべての答えは、ノードを非公開にするという提案です。これは、いくつかのコンテンツタイプをスライドショーでのみ表示するようにした、つまり、www.mysite.com/node/40すべてのraw他のブロックのスライドショーを構成する画像は、私が欲しかったものではありませんでした。スライドショーのコンテキスト内でのみ画像を表示したい。

ただし、これらの回答に従い、ノードのコンテンツを非公開にすると、コンテンツはスライドショービューにアクセスできなくなりました。匿名の閲覧者にとっては空白になりました。ノードを非公開にする方法で見逃したものはありますが、それでもブロックとしてビューからそのコンテンツにアクセスできるようにしますか?

私は、上記のリンクで言及したhtaccess、フック、またはjavascriptオプションを使用せずにこれを実行しようとしています。

裸でアクセスできるコンテンツのリストを持つことnodes/123は、実際には意図的な機能だとは思えません。

これを厄介な問題にするもう1つの条件-へのアクセスを防ぐ方法はありますがnode/123、ノードを作成または編集する独自の能力を妨げる可能性もあります!


ミトンチョップスこんにちは。私見、あなたのリンクをもう一度確認することをお勧めします。非公開が唯一の答えではありません。フック、ビュー、およびその他の方法がリストされています。
cigotete

ありがとう、moon.watcher、わかりましたが、私は、プライベートホールディングエリアとパブリックディスプレイエリアを区別することは非常に便利(そして簡単)であると思います。他にも方法はあると思いますが、この方法でうまくいきたいです。
Mittenchops 2011

htaccessを使ってみましたか?
ram4nd 2011

ええ、私はそれが正しい動作を実現することを理解しています---それでも、これを行うためのシステム内の方法があるはずですよね?どこかにデフォルトまたはチェックボックスがありますか?質問を修正して、その部分を明確にしましょう。ありがとう!
Mittenchops 2011

1
drupal.stackexchange.com/questions/5622/…に対する承認された回答では、コンテンツを非公開にする必要ありませ
mpdonadio

回答:


5

この機能を提供する2つのDrupalモジュールがあります。


これらをありがとう!これを行うためのカスタムモジュールを提案するつもりでしたが、もちろんそのためのモジュールがあります。この質問の本当の問題は、ある種類のマッシュアップでのみ表示され、それ自体では決して表示されないコンテンツのビットをどのように処理するかであり、それがまさにこれら2つのモジュールが処理するものです。より抽象的には、そのようなコンテンツを取得するときは常に、ノードではなくノードではないエンティティにすることをお勧めします。これは、その他の理由で発生します(たとえば、ノードフックをすべて起動したくない場合など)。
アランディクソン

うさぎの穴を推薦することに賛成。それを試して、仕事を簡単に行います。内部ノードを試していないので、比較できません。
consuela

2

nodeone.seのJohan Falkがページマネージャー(非常に一般的なモジュールであるcToolsの一部)で優れたビデオシリーズを丁寧に執筆し、あなたが非常によく説明しているようなユースケースを取り上げました。リンク

基本的には、ページマネージャーでバリアントを設定し、目的の宛先にリダイレクトするための応答をhttp要求コード(おそらくこの場合は301)にします。彼の例では(シリーズの2番目または3番目のビデオだったと思いますが、どれもかなり高速です)、ノード参照を使用していて、「サブノード」に到達させたくないのですが、親にリダイレクトしましたノードにアクセスしようとした場合。ユースケースはもっと単純なように聞こえますが、正しい完全なスライドショーを表示するページにリダイレクトされたスライドショーノードの1つにアクセスしようとする人がいるだけです。

この魔法のすべてを機能させるためにパネルさえ必要ありません。また、関連ノードをロードするためにノード参照などがインストールされている場合、リダイレクトルールがかなり複雑になる可能性があります。


ありがとう、チャンスG!私は今、チュートリアルを調べていますが、多分それでうまくいくでしょう。
Mittenchops 2011

確かに優れたビデオシリーズ(「最近」ではありませんが)。そして参考までにnodeone.seリンクはもう機能しません。リンクを更新しますか?
Pierre.Vriens

1

検索エンジンのアクセシビリティの問題だけであれば、robot.txtファイルを使用して、検索エンジンがサイトの特定のページにアクセスできないようにする必要があります。

このTechnicを使用しても、サイトのユーザーは例のようにURLにアクセスできますwww.mysite.com/node/40


ありがとう!それは理にかなっていますが、人間以外にも人間にもまったくアクセスできないようにする方法はありますか?これには簡単な.htaccessコードがあると思いますが、それもやり過ぎのようです。多分私は間違っているかもしれませんが、それは簡単で明白なはずの区別のようなもののようです。つまり、意図的にノードメニューの下に不適切にフォーマットされたジャンクのリストが欲しいとは誰も想像できないでしょう。
Mittenchops 2011

はい、私はそれをどのように達成するのか私自身も疑問に思うので、後であなたのためにあなたの質問を保存します。これを調査する時間はまだありませんが、すぐに回答が得られたら、必ずここに投稿します。moon.watcherが提案したように、質問のタイトルを編集する必要がありますが、少し混乱します。
silkAdmin

OK、クール、タイトルを調整して、「検索エンジン」の焦点では​​なく「完全に」を明確にしました。ありがとう!
Mittenchops 2011

0

編集:無理、これはうまくいきませんでした!

コンテンツの編集は「/ node / add / ...」の下にあるため、管理者がコンテンツを作成および編集できるようにするために追加できるアクセスルールがあることがわかりました。匿名ユーザーのアクセス制限も解除され、すべてのユーザーがコンテンツを表示できるようになりました。私が始めた場所のようなものですが、他の誰かが道を見るのを助けるためにこれを残しておきます。元の答えは次のとおりです:

わかりました。これは、プログラムを使用せずにこれを達成するためのレシピです。

  1. ページマネージャーモジュール(ctoolsの一部)を有効にし、ページマネージャーリダイレクトモジュールをインストールして有効にします:http ://drupal.org/project/page_manager_redirect 。
  2. 管理メニューで、構造>>ページに移動します
  3. 以下の表で、カスタムページ「システムnode_viewノードテンプレート/ node /%node」を識別し、右側の[編集]をクリックします。
  4. 私には、デフォルトで「基本ページ」と「ストーリー作成者」がいました。私はこれらの両方で無効化をクリックします(ただし、これらの機能を使用する場合は、保持したい場合があります---私は使用しません)。
  5. 「バリアントを追加」をクリックします
  6. タイトル:「メインにリダイレクトします。」バリアントタイプ:「HTTP応答コード」。そして「選択ルール」をチェックしてください。[バリアントを作成]をクリックします。
  7. 次に、選択ルールを追加します。
    7.a. ドロップダウンボックスで、[ユーザー:ロール]に移動し、[追加]をクリックします。>>しない(ログインしているユーザーの役割は「管理者」)
    7.b. 別の選択ルール>> node:typeを追加します。ユーザーがネイキッドノードを表示できないようにするすべてのコンテンツタイプをクリックします。次に[NOT]をクリックします。私にとっては、ネイキッドノードを表示したくないので、所有しているすべてのコンテンツタイプをクリックしました。
  8. HTTP応答コードを301に設定し、リダイレクトを空白のままにします(= to main)。

根拠:

  • これは、htaccessやモジュールの作成ではなく、このルートを使用しました。これは、インターフェース内でアクセス可能に修正できるような問題のように思えるからです。繰り返しになりますが、デフォルトの動作でない場合は、すべてのコンテンツがnodes /の下に表示され、番号が付けられているグループの騒ぎが発生するとは思いません。
  • 選択規則に関して:最初の規則は、管理者(またはあなたが持っている編集者レベルのグループ)のために、コンテンツを作成および編集できることを保証します!これをオフにしておくと、新しいコンテンツを追加しようとすると、メインにリダイレクトされます。2番目のコンテンツタイプは、URLエイリアスでページを表示できるようにするために必要でした。これをチェックしないと、たとえばブログの投稿をクリックしても、ティーザーだけがページ全体に表示されませんでした。なぜこれが当てはまったのか、またはポジティブなアクセス許可ではなく、なぜネガティブなアクセス許可をここで行う必要があるのか​​がわかりません。しかし、これは私が編集者に編集を許可し、匿名の閲覧者にフォーマットされたコンテンツタイプを表示するために変更する必要があったものであり、node /ではありません。

潜在的な落とし穴:

新しいコンテンツタイプを作成する場合は、ページマネージャーに戻って更新することを忘れないでください(つまり、2番目の選択ルールのボックスをオンにします)。

今後の改善:

誰かが本当にクールな人なら、彼らはこのプロセスを自動的に行う単一のモジュールを作り、それを「ノードを隠す」と呼ぶでしょう。=)繰り返しますが、「nodes /」を非表示にすることがデフォルトのDrupal動作であるといいのですが、私だけではないことは確かです。私はこれらをステージングおよびコレクションの領域と実際に見なしています。それらを一般に公開することは非常に奇妙に思えます。魔法使いが鳩を袖に突き刺すのを見るようなものです。

チャンスGが私を指さしてくれて、そしてJohan Falkがチュートリアルを教えてくれてありがとう!

編集:更新

上記から、私はこの質問への答えはこれを行う方法はないと言います。ノードで立ち往生しています!


もう少し詳しく言うと、問題は、「基本ページ」を常に表示して、たとえば個々のブログ投稿を表示できるようにすることですが、残念ながら、ノード/ 123だけを表示することも基本ページです。 。しかし、おそらくこれは別の解決策への道を示していますか?node / 123を基本ページとしてカウントせず、blog / my-blog-postをカウントするにはどうすればよいですか?
Mittenchops 2011

代わりに別の答えを受け入れてもらえませんか?
leymannx 2017

0

誰もコードの答えを出していないので、ここに別のオプションがあります:

/**
 * 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ではありません。ノードのパスエイリアスはここでは関係ありません。


0

ルールモジュールを使用すると、次のようなルールを実装できます。

{ "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" } }
    ]
  }
}

のようなURLを使用しnode/...ているユーザーは、パスが設定されたページにリダイレクトされますno_access(ニーズに合わせてそのパスを調整します)。

上記のルールでは、(まだ)選択されたロール(匿名ユーザーなど)のみに「アクション」を適用することは考慮されていません。しかし、Rulesモジュールに少し慣れている人にとっては、これは簡単に追加できる「条件」です。ノードの限られたリスト(数個)へのそのようなアクセスのみを防止したい場合は、使用する必要はありません。 「text_matches」条件での「正規表現」操作(関連するノードの完全一致と置き換えるだけです)。

独自のサイトでこのルールを試すには、上記のルールコード全体をコピーして、「インポート」機能で作成した独自のサイトの新しいルールに貼り付けます。次に、さらに編集/調整して、自分の環境に合わせます(たとえば、「Sorry、...」メッセージが表示されます)。

注意:このルールは質問タイトルの「完全に」の部分を真剣に受け止めています...このルールを有効にすると(追加のルール条件が追加されず、選択したルールにのみ適用されるため)、管理者(またはuser / 1 ... )などの(繰り返し:任意の)URLにはアクセスできませんnode/...。これを回避する唯一の方法は、このルールを(一時的に)無効にし、関連するルール条件を追加して(とにかく選択したロールを許可する)、ルールを再度有効にすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.