web-dev-qa-db-ja.com

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

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

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

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

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

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

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

7
Mittenchops

EDIT:NEVERMIND、THIS DID NOT WORK!

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

わかりました。これは、プログラムを使用しない方法でこれを実現するための簡単な方法です(次の理由の説明)。

  1. ページマネージャーモジュール(ctoolsの一部)を有効にし、ページマネージャーリダイレクトモジュールをインストールして有効にします: http://drupal.org/project/page_manager_redirect
  2. 管理メニューで、構造>>ページに移動します
  3. 以下の表で、カスタムページ「システムノードビューNodeテンプレート/ 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が tutorial を出してくれてありがとう!

編集:UPDATE

上記から、私はこの質問への答えはこれを行う方法はないと言います。ノードに行き詰まっています!

0
Mittenchops

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

5
alexanderpas

Nodeone.seのJohan Falkが最近、Page Manager(非常に一般的なモジュールであるcToolsの一部)で優れたビデオシリーズを行い、あなたが非常によく説明しているようなユースケースを取り上げました。 リンク

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

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

2
Chance G

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

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

1
silkAdmin

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

/**
 * 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
Felix Eve

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にアクセスできなくなります。これを回避する唯一の方法は、このルールを(一時的に)無効にし、関連するルール条件を追加して(とにかく選択したロールを許可する)、ルールを再度有効にすることです。

0
Pierre.Vriens