6

ブロックが現在置かれているビュー ページのノード ID を表示できるブロックを Drupal で構築するにはどうすればよいですか?

ビューを使用してサイトの大部分を構築していますが、ビューが表示しているものに応じて動的コンテンツを持つ "インテリジェントな" ブロックを PHP モードで作成できる必要があります。

ビューが現在表示している $nid を見つけるにはどうすればよいですか?

4

6 に答える 6

14

ノード 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']、エイリアスまたはシステム パスのいずれかを返します。

于 2009-11-23T16:58:40.537 に答える
7

ソリューション、特に のようなパスの途中にビュー引数が含まれるソリューションについてはdepartment/%/list、ブログ投稿Node ID as View Argument from SEO-friendly URL Pathを参照してください。

于 2010-11-18T06:18:12.487 に答える
2

最後に、このスニペットは仕事をしました - それはきれいなURLを取り除き、最後の引数を報告しました。

<?php
    $refer= $_SERVER ['REQUEST_URI'];
    $nid = explode("/", $refer);
    $nid = $nid[3];
?>

コメントの返信を考えると、上記はおそらくこれに縮小され、Drupalarg()関数を使用してリクエスト パスの一部を取得しました。

<?php
    $nid = arg(3);
?>
于 2009-11-04T18:20:59.343 に答える
1

パネル モジュールを検討する必要があります。これは非常に大きなモジュールであり、その可能性を実際に活用するには、いくつかの作業が必要です。そのため、それを考慮してください。

これを使用して、異なる領域に配置できる複数のビュー/ブロックを含むページをセットアップできます。コンテキストと呼ばれる概念を使用します。これは、表示しているものに関連するものであれば何でもかまいません。そのコンテキストを使用して、表示されているノードを特定し、ブロックだけでなくレイアウトも変更できます。また、管理インターフェイスから PHP コードを移動できるため、もう少しクリーンです。

ちなみに、ビューの作成者によっても書かれています。

于 2009-11-03T22:11:40.933 に答える
1

これにはいくつかの方法があります。

  1. ビューを使用してブロックを作成し、引数を介して nid を渡すことができます。

  2. $view以下のコードを使用してオブジェクトにアクセスすることにより、nid を手動で渡すことができます。の配列$view->resultです。ビューの各行はその配列のオブジェクトであり、nid はそれぞれのオブジェクトにあります。したがって、その上で foreach を実行すると、ビュー内のすべての行の nid をすべて簡単に取得できます。

最初のオプションははるかに簡単なので、それがあなたのニーズに合っているなら、私はそれに行きます.

于 2009-11-03T18:14:58.817 に答える