ブロックが現在置かれているビュー ページのノード ID を表示できるブロックを Drupal で構築するにはどうすればよいですか?
ビューを使用してサイトの大部分を構築していますが、ビューが表示しているものに応じて動的コンテンツを持つ "インテリジェントな" ブロックを PHP モードで作成できる必要があります。
ビューが現在表示している $nid を見つけるにはどうすればよいですか?
ブロックが現在置かれているビュー ページのノード ID を表示できるブロックを Drupal で構築するにはどうすればよいですか?
ビューを使用してサイトの大部分を構築していますが、ビューが表示しているものに応じて動的コンテンツを持つ "インテリジェントな" ブロックを PHP モードで作成できる必要があります。
ビューが現在表示している $nid を見つけるにはどうすればよいですか?
ノード ID を取得するより確実な方法を次に示します。
<?php
// Check that the current URL is for a specific node:
if(arg(0) == 'node' && is_numeric(arg(1))) {
return arg(1); // Return the NID
}
else { // Whatever it is we're looking at, it's not a node
return NULL; // Return an invalid NID
}
?>
path
この方法は、および/またはpathauto
モジュールを使用してノードのカスタム パスがある場合でも機能します。
参考までに、モジュールをオンにしないpath
場合、Drupal が生成するデフォルトの URL は、ドキュメントでは「システム パス」と呼ばれます。モジュールをオンにするとpath
、ドキュメントで「エイリアス」と呼ばれるカスタム パスを設定できます。
私は常にpath
モジュールをオンにしていたので、最初に混乱したことの 1 つは、arg
関数がシステム パスの一部ではなくエイリアスの一部を返すことができるかどうかということでした。
結局のところ、関数はに基づいているarg
ため、arg
$_GET['q']
関数は常にシステムパスを返します...少し調査した後、$_GET['q']
常にシステムパスを返すようです。
実際のページ リクエストからパスを取得する場合は、 を使用する必要があります$_REQUEST['q']
。path
モジュールが有効な場合$_REQUEST['q']
、エイリアスまたはシステム パスのいずれかを返します。
ソリューション、特に のようなパスの途中にビュー引数が含まれるソリューションについてはdepartment/%/list
、ブログ投稿Node ID as View Argument from SEO-friendly URL Pathを参照してください。
パネル モジュールを検討する必要があります。これは非常に大きなモジュールであり、その可能性を実際に活用するには、いくつかの作業が必要です。そのため、それを考慮してください。
これを使用して、異なる領域に配置できる複数のビュー/ブロックを含むページをセットアップできます。コンテキストと呼ばれる概念を使用します。これは、表示しているものに関連するものであれば何でもかまいません。そのコンテキストを使用して、表示されているノードを特定し、ブロックだけでなくレイアウトも変更できます。また、管理インターフェイスから PHP コードを移動できるため、もう少しクリーンです。
ちなみに、ビューの作成者によっても書かれています。
これにはいくつかの方法があります。
ビューを使用してブロックを作成し、引数を介して nid を渡すことができます。
$view
以下のコードを使用してオブジェクトにアクセスすることにより、nid を手動で渡すことができます。の配列$view->result
です。ビューの各行はその配列のオブジェクトであり、nid はそれぞれのオブジェクトにあります。したがって、その上で foreach を実行すると、ビュー内のすべての行の nid をすべて簡単に取得できます。
最初のオプションははるかに簡単なので、それがあなたのニーズに合っているなら、私はそれに行きます.