web-dev-qa-db-ja.com

現在のノードをブロックビューから除外する方法は?

次のコンテンツタイプのノードをリストするブロックビューを作成しました:cars

ブロックを2番目のサイドバーに追加しました。

その後、タイトルが付いたこのタイプのノードを2つ作成しました:car-1およびcar-2

次に、ビューブロックにこれらの2つのノードが表示されます。ここまでは順調ですね。

ページにアクセスするとexample.com/car-1ブロックに、car 1ノードとcar 2ノードの両方がリストされています。私はexample.com/car1にいるため、ブロックからcar-1ノードを除外します。

これは私がビューでやったことです:

1.  Click on add under "contextual filters".    
2.  Choose Content:nid.
3.  Under "when the filter variable is not available, choose "provide default value".
4.  From the drop down menu select "content id from url".
5.  Scroll all the way down to the bottom of the window and click on the
6.  "More" link.
7.  Click "Exclude"

ノードにアクセスすると問題なく動作しますが、ブロックはどのビューにも表示されません(つまり、frontpageビューにあります)。

その理由はコンテンツnidがビューに存在しないことですが、これを回避する方法がわかりません。

3
chefnelone

1つのオプションは、ブロックのクローンを作成し、すべてを表示する(コンテキストフィルターと除外設定を削除する)ことと、ブロック構成で(admin/structure/blockを介して)node/*を除くすべてのページに表示するように構成することです。

すべてを1つのディスプレイに表示したいがphpを使用しても構わない場合は、[デフォルト値を提供]> PHP code:

if (arg(0) == 'node' && is_numeric(arg(1))) {
  return arg(1);
} else {
  return 0;
}

除外チェックボックスをオンにする必要があります。

したがって、これはSQLに除外するノードID(通常は現在のノードID)を与えます。ノードIDがない場合、除外するノードIDは0です。つまり、nid 0がないため、何も除外しません。 。

2番目の引数が数値であることを確認しないと、「ノード」はあるがnidがないため、これはデフォルトのフロントページでは機能しません。

1

Page Manager/Panelizerの使用例。これは、このタイプのopコンテンツページの作成のためのものです。

もう1つの方法は、コンテキストモジュールです。その場合、どのコンテキストでどのページを使用するかを定義できます。この良い例は、julioディストリビューション(www.drupal.org/project/julio)です。

ページマネージャーの方法に興味がある場合は、このスクリーンキャストをご覧ください http://nodeone.se/sv/node/702

0
user26432