Corresponding Entity References

CERはエンティティ間の双方向参照を自動的に作成・維持することで、エンティティ参照フィールドを同期状態に保ちます。

cer
6,390 sites
75
drupal.org

概要

Corresponding Entity References(CER)は、エンティティ参照フィールドを使用するエンティティ間の双方向関係を自動的に維持します。エンティティAliceがエンティティBobを参照すると、CERは自動的にBobからAliceへの逆参照を作成します。この同期は、どちらかのエンティティが作成、更新、または削除されるたびに継続されます。

CERは「プリセット」を通じて動作します。プリセットは参照タイプフィールド間の関係を定義する設定エンティティです。どの2つのフィールドが相互に対応すべきか、どのエンティティバンドルがその関係に参加するかを指定します。このモジュールはコアのEntity Referenceフィールドとすぐに連携できます。

このモジュールはCorresponding Node References(CNR)モジュールのDrupal 8/9/10/11後継版であり、ノードだけでなくフィールドを持つあらゆるエンティティタイプで動作するようにゼロから再構築されました。

Features

  • エンティティ参照フィールドの自動双方向同期 - エンティティAがエンティティBを参照すると、エンティティBは自動的にエンティティAを参照
  • どのフィールドが相互に対応すべきかを定義する設定エンティティベースのプリセット
  • エンティティ参照フィールドを持つあらゆるエンティティタイプをサポート(Node、Taxonomy Term、User、Commerce製品など)
  • 特定のエンティティバンドルに同期を制限するバンドルフィルタリング
  • エンティティタイプのすべてのバンドルを含めるワイルドカードバンドルサポート(entity_type:*)
  • 追加方向の制御 - 新しい参照を既存の参照の先頭に追加(prepend)するか末尾に追加(append)するかを選択
  • 各対応参照プリセットの有効/無効切り替え
  • 管理UIを通じた既存参照の手動同期機能
  • 自動クリーンアップ - エンティティが削除されると、対応するエンティティからの参照も自動的に削除
  • 他のモジュールが同期動作を変更できるHook API(hook_cer_differences_alter)
  • 複数値エンティティ参照フィールドに対応 - 個々の参照の追加と削除を正しく処理
  • エンティティ/フィールド権限を尊重 - 同期は通常のセキュリティコンテキストで動作

Use Cases

双方向のNode関係

コンテンツタイプ間の双方向関係を作成します。例えば、「記事」と「関連記事」があり、記事が他の記事を参照する場合、CERは記事Aが記事Bを参照すると、記事Bの関連記事フィールドに自動的に記事Aを表示することを保証します。

著者と作成コンテンツの関係

ユーザーとそのコンテンツを双方向にリンクします。Nodeにカスタムの「著者」フィールドがあり、ユーザープロフィールに「公開作品」フィールドがある場合、CERはこれらを自動的に同期します。

商品とカテゴリの関係

ECサイトで商品とカテゴリ間の双方向関係を維持します。商品がカテゴリに追加されると、カテゴリは自動的にその商品をリストします。

イベントとスピーカーの管理

イベントサイトでイベントをスピーカーに、スピーカーをイベントにリンクします。スピーカーがイベントに追加されると、そのイベントは自動的にスピーカーのプロフィールに表示されます。

組織階層

同じコンテンツタイプ内で双方向の親子関係または関連エンティティ関係を作成します。組織構造、地域階層、または自己参照関係に便利です。

異なるエンティティタイプ間の関係

Node、Taxonomy Term、Commerce製品など異なるエンティティタイプをリンクします。例えば、ブログ記事をTaxonomy Termにリンクし、タームがそれらでタグ付けされた投稿を自動的に参照するようにできます。

Tips

  • CERは参照されるエンティティに関する追加情報を保存しないため、古いバージョンからのアップグレードは簡単です - アップグレード後にCERを設定するだけで、既存の関係は引き続き機能します
  • エンティティタイプのすべてのバンドルを同期に参加させたい場合は、ワイルドカードバンドルオプション(entity_type:*)を使用してください
  • 自己参照の双方向関係を作成するには、First fieldとSecond fieldの両方に同じフィールドを使用できます
  • プリセットを設定する際はフィールドのカーディナリティを考慮してください - フィールドが1つの参照のみを許可する場合、最新の参照のみが保持されます
  • 公開されたエンティティのみを同期するなどのカスタムロジックを追加するには、hook_cer_differences_alter()を使用してください
  • 大量のコンテンツセットに適用する前に、少量のコンテンツで対応参照をテストしてください
  • CERはエンティティとフィールドの権限を尊重します - 適切なユーザーロールでテストしてください

Technical Details

Admin Pages 5
対応参照 /admin/config/content/cer

設定されたすべての対応参照プリセットのリストを表示するメイン管理ページ。各プリセットのラベル、マシン名、対応フィールド、追加方向(append/prepend)、有効状態を表示します。各プリセットの編集、削除、同期のための操作リンクを提供します。

対応参照を追加 /admin/config/content/cer/add

2つのエンティティ参照フィールド間の双方向関係を定義する新しい対応参照プリセットを作成するフォーム。

対応参照を編集 /admin/config/content/cer/{corresponding_reference}

既存の対応参照プリセットを変更するフォーム。マシン名以外のすべての設定を変更できます。

対応参照を削除 /admin/config/content/cer/{corresponding_reference}/delete

対応参照プリセットを完全に削除するための確認フォーム。これはエンティティから既存の参照を削除するものではなく、同期設定のみを削除します。

対応参照を同期 /admin/config/content/cer/{corresponding_reference}/sync

このプリセットのすべてのエンティティの同期を手動でトリガーするための確認フォーム。新しいプリセットを作成した後や同期を有効にした後に既存のコンテンツを同期させるのに便利です。

権限 1
Corresponding Entity Referencesの管理

ユーザーが対応参照プリセットを作成、編集、削除、同期できるようにします。この権限を持つユーザーは、すべての双方向エンティティ参照設定を管理できます。

Hooks 1
hook_cer_differences_alter

CERによって計算された差分が適用される前に、モジュールがその差分を変更できるようにします。どの参照が追加または削除されるかを変更するために、エンティティ同期中に呼び出されます。

Troubleshooting 5
参照が自動的に作成されない

対応参照プリセットが有効になっていることを確認してください。参照されている両方のエンティティがプリセットのバンドルフィールドで設定されたバンドルに属していることを確認してください。両方のエンティティに設定された参照フィールドがあることを確認してください。

同期中に権限拒否エラーが発生する

CERは通常のセキュリティコンテキストで動作します。現在のユーザーが参照されるエンティティを編集する権限を持っていることを確認してください。Field Permissionsモジュールを使用している場合はフィールドレベルの権限を確認してください。

プリセット作成後に既存のコンテンツが同期されない

プリセットの同期操作を使用して既存のエンティティを処理してください。プリセットの編集ページに移動し、同期タスクタブを使用してください。

自己参照フィールドが機能しない

CERは自己参照関係をサポートしています。First fieldとSecond fieldの両方が同じフィールド名に設定されていること、バンドルが正しく設定されていることを確認してください。

参照が間違った順序で表示される

プリセットのAdd Direction設定を確認してください。新しい参照を先頭に追加するには'Prepend'を、参照リストの末尾に追加するには'Append'を使用してください。

Security Notes 4
  • CERは通常のDrupalセキュリティコンテキストで動作します - 現在のユーザーがアクセスできないエンティティを参照することはできません
  • 対応参照設定を管理するには、ユーザーは'administer cer'権限が必要です
  • 同期操作はエンティティアクセス制御を尊重します - 許可されていない参照は作成されません
  • Field PermissionsなどのモジュールをCERと併用する場合は、フィールドレベルの権限に注意してください