双方向のノード参照を実装するにはどうすればよいですか?
質問
ノード参照モジュール (CCK のコンポーネント) は、あるノードから別のノードへの参照を作成する優れた方法を提供します。二人の双方向の関係を明らかにする最善の方法は何でしょうか?以下の例:
たとえば、2 つのチケット (ノード) A と B を持つチケット追跡システムでは、チケット A --> B からノード参照を作成し、B を子としてマークできます。チケット A を表示するときに、この情報を表示するのは簡単です。ただし、チケット B を表示し、チケット A をその親として表示するときにもこの関係を表示したいと考えています。
これと同じ要件は、C --> D からの参照を伴う非階層状況 (チケット C および D) にも適用され、その関係はチケット C だけでなくチケット D でも公開される必要があります。
解決
利用可能な多くのモジュールがあり、あなたのマイレージは異なる場合があります:
逆 (Drupal 6のみ)
Nodereferrer (Drupal 7ベータリリース)
ノード関係 (Drupal 6のみ)
対応するノード参照 (Drupal 7安定したリリース)
対応するエンティティ参照 (Drupal 7 Devリリース)
コンテンツ依存関係 (Drupal 7安定したリリース)
他のヒント
エンティティリファレンスモジュール 今は一緒に働いています 対応するエンティティ参照. 。これは、すべてのノードと非ノードエンティティに最適です。
Drupal 6にとって、最良の選択肢はおそらく Nodereferrerモジュール. 。 Drupal 7の場合、 関係 法案に適合しますが、まだ準備ができていません。
Drupal 7 /ビューを使用している場合、「逆」関係を構築して、特定のノード(または、特定のノードを参照するユーザー)を参照するノードのリストを取得できます。この問題のパッチをチェックしてください。 http://drupal.org/node/1043260
私の意見では、データベースに保存されている明示的な事前に構築された逆の関係が必要な場合(これは、パフォーマンス上の理由で役立つ場合があります)、他のソリューションのいずれかを使用するのはやり過ぎです。必要に応じて、いつでも自分のSQLクエリで関係を調べることができます...
編集:もともとこの投稿を書いているので、上記の問題のパッチはD7の参照にコミットしており、好みの逆の方法である必要があります(特定のノードまたはユーザーを参照するノードまたはユーザーのリストを必要とするだけでも素晴らしい作品です) 。
編集2:エンティティリファレンスを使用している場合、優先ソリューションは使用するように見えます 対応するエンティティ参照, 、そしてそれほど多くはありません エンティティリファレンスフィールド同期.]
の Drupal 7 (あなたが示したこと)それは解決策が使用することだと思われます エンティティリファレンスモジュール と組み合わせて (エンティティ)参照フィールド同期モジュール これにより、関係が同期し続けるために必要な機能が追加されます。
同じことを達成できます 参照モジュール と CNRモジュール - このソリューションは機能します(現在1つのDrupal 7サイトで使用しています)が、最初に与えたソリューションを支持して時代遅れ/非難されています。
上記の回答に記載されている他のすべてのソリューションは、 Drupal 6 (を除いて 関係 これは素晴らしいモジュールになる可能性がありますが、今のところ、実際には多くのことをしておらず、多くの問題があります)。
あるいは、カスタム実装に取り組んでいて、簡単に逆参照する方法が必要な場合は、次のようにフックすることもできます。 nodeapi
, 、聞いてください。 save
操作を実行し、プログラムで参照ノードを更新します。
あなたも試すことができます リバースノードリファレンス モジュール。
ルールとこのルールを使用するだけです http://drupal.org/node/1836240
使用できます コンテンツ依存関係 モジュール。
タブを介して逆の参照を提供し、次のモジュールをサポートします。 ノードリファレンス /エンティティリファレンス.