web-dev-qa-db-ja.com

双方向ノード参照を実装する方法は?

ノード参照モジュール(CCKのコンポーネント)は、あるノードから別のノードへの参照を作成するための優れた方法を提供します。 2つの間の双方向の関係を公開する最良の方法は何ですか?以下の例:

たとえば、2つのチケット(ノード)AおよびBを持つチケット追跡システムでは、チケットA-> Bからノード参照を作成し、Bを子としてマークできます。チケットAを表示するときに、この情報を表示するのは簡単です。ただし、チケットBを表示し、その親としてチケットAを表示する場合にも、この関係を表示したいと思います。

この同じ要件は、C-> Dからの参照がある非階層的な状況(チケットCおよびD)にも適用され、関係はチケットDとCの両方で公開されます。

20
markdorison

利用可能な多くのモジュールがあり、あなたの距離は異なる場合があります:

BackReference (Drupal 6のみ)

NodeReferrer (Drupal 7ベータリリース)

ノードの関係 (Drupal 6のみ)

対応するノード参照 (Drupal 7安定版リリース)

対応するエンティティ参照 (Drupal 7開発者向けリリース)

コンテンツの依存関係 (Drupal 7安定版リリース)

25
tim.plunkett

エンティティ参照モジュール対応するエンティティ参照 で機能するようになりました。これは、すべてのノードおよび非ノードエンティティに最適です。

7
tmsimont

Drupal 6の場合、おそらく最適なオプションは NodeReferrerモジュール です。Drupal 7、の場合 Relation 法案に適合しますが、まだ準備ができていません。

4
Pierre Buyle

Drupal 7/Viewsを使用している場合は、「リバース」関係を構築して、特定のノードを参照するノード(または、特定のノードを参照するユーザー)のリストを取得できますこの問題のパッチを確認してください: http://drupal.org/node/1043260

私の意見では、データベースに保存された明示的な事前に構築された逆の関係が必要でない限り(これはパフォーマンス上の理由で役立つ場合があります)、他のソリューションの1つを使用するのはやりすぎです。必要な場合は、いつでも独自のSQLクエリで関係を検索できます...

[編集:最初にこの投稿を書いて以来、上記の問題のパッチはD7の参照にコミットされており、後方参照の推奨される方法である必要があります(特定の他のノードまたはユーザーを参照するノードまたはユーザーのリストが必要な場合にのみ機能します) 。]

[編集2:エンティティ参照を使用している場合、 対応するエンティティ参照を使用することをお勧めします 。 -used エンティティ参照フィールドの同期 。]

4
geerlingguy

Drupal 7(あなたが示した)では、解決策は Entity Reference Module を-と組み合わせて使用​​することです (Entity)Reference Field Synchronization module これは、関係の同期を維持するために必要な機能を追加します。

同じことが References Modulecnr module で実現できます-このソリューションは機能します(現在、1つのDrupal 7サイトで使用しています) )が、廃止/廃止予定になり、最初の解決策が支持されました。

上記の回答で述べた他のすべての解決策は、Drupal 6にのみ関連します(- Relation を除く)素晴らしいモジュールですが、現在はあまり機能せず、多くの問題があります)。

3
Moshe Eshel

または、カスタム実装で作業していて、直接参照して戻る方法が必要な場合は、nodeapiにフックし、save操作をリッスンして、参照されたノードをプログラムで更新できます。

2
enikola

Reverse Node Reference モジュールを試すこともできます。

1
user580

単にルールとこのルールを使用する http://drupal.org/node/183624

0
giorgio79

Content Dependency モジュールを使用できます。

タブを介して逆参照を提供し、次のモジュールをサポートします:ノード参照/エンティティ参照

0
drupal