web-dev-qa-db-ja.com

Drupal 7に参照がある関連コンテンツ

私はこのWebサイトをDrupal 7年前に使用しました。ここで、参照モジュールが重要な役割を果たします。

たとえば、映画と俳優の2つのコンテンツタイプがあり、コンテンツタイプの映画に俳優ノードを参照する参照フィールドがあるとします。さて、この映画の俳優が参照している他の映画を一覧表示するブロックをどのように作成しますか?

何かがここにあるようです: http://drupal.org/node/370227 しかし、それはDrupal 7.では機能しないようです。

また、コンテンツタイプの映画には1000を超えるノードがあるため、[参照]フィールドからも移動しないようにしています。私のすべてのURLはexample.com/content-exampleのようになっています

ありがとう!

1
varchar1

コンテキストフィルターを使用して、これらすべてを1つのビューで実行し、それを関係として使用して問題の映画を指すことができると思いますが、phpコーディングを気にしない場合は、これらすべてをかなり簡単に実行できます自分自身と1つの単純なビュー。

_1.  create a view that has a contextual filter using the actor reference field, eg,
it returns just the movies that contain that actor, and in fields, just nid of the 
movie node should be sufficient.  Make sure that this will reference any actor in the
movie, eg, all of the values of this field, not just the first one.
_

次に、ブロックフックで、次の行に沿って何かを配置します。

_$node=menu_get_object();

$movies=array();
foreach ($node->NAME_OF_ACTOR_REFERENCE_FIELD as $actor) {
   $view=views_get_view('NAME_OF_VIEW_ABOVE');
   $view->set_arguments(array($actor['nid']));
   $view->execute();
   foreach ($view->result as $result) {
      $movies[$result->nid]=$result->nid;
   }
}
_

もちろん、これがムービーを表示しているページに表示されていると仮定すると、これは、そのノードで参照されているアクターを取得してループし、それらを参照している各ムービーも取得して、配列に格納します。この配列を映画のnidに合わせるため、映画の一意のリストも作成します。

これで、映画のnidのリストができたので、次のようなことができます。

_foreach ($movies as $nid) {
  $node=node_load($nid);
  $content.='<div class="movie-title-link">' . l($node->title, $node->path) . ' </div>';
}
_

ブロックのコンテンツとして$ contentを返し、CSSを使用してスタイルを設定します。

警告:私はD7を学習しているだけで、D6の多くのことが遊びに忍び込んできます。上記のほとんどはメモリから入力するだけなので、微調整が必​​要になる可能性があります(drupal_set_message()およびprint_r()はあなたの友達です)が、うまくいけば助けになります。

2
Jimajamma