Entity Reference Override
Drupalのエンティティ参照フィールドを拡張し、参照されたエンティティのタイトル、CSSクラス、表示モード、フィールド値などの側面を上書きできる付随テキストフィールドを提供します。
entity_reference_override
概要
Entity Reference Overrideモジュールは、標準のエンティティ参照機能とカスタムテキストフィールドを組み合わせた拡張エンティティ参照フィールドタイプを提供します。このカスタムテキストは、参照エンティティが参照元エンティティのページに表示される際に、参照エンティティの特定の側面を上書きするために使用できます。
これは、参照コンテンツのコンテキスト固有のカスタマイズが必要なコンテンツ編集者にとって特に便利です。たとえば、複数の記事から同じ著者プロフィールを参照する場合、各記事は元の著者エンティティを変更することなく、その著者の異なるタイトルや経歴を表示できます。
このモジュールは以下の上書きをサポートしています:
- エンティティタイトル/ラベル - 参照エンティティのタイトルを完全に置換または追加
- CSSクラス - レンダリングされた参照にカスタムスタイリングクラスを追加
- 表示モード - 参照エンティティを別のビューモードでレンダリング
- テキストフィールド - 参照エンティティの任意のstring、text、またはemailフィールドを上書き(実験的機能)
上書きテキストは設定に応じてプレーンテキストまたはフォーマット済みHTMLにでき、シンプルなラベル上書きからリッチコンテンツ置換まで柔軟に対応できます。
Features
- コアのエンティティ参照フィールドを拡張し、追加のoverrideおよびformatカラムを持つカスタムフィールドタイプ「Entity reference w/custom text」を提供
- エンティティ選択と上書きテキスト入力を同時に行えるインライン カスタムテキスト入力フィールド付きオートコンプリートウィジェット
- 参照可能なエンティティのリストから選択できるセレクトドロップダウンウィジェットと付随する上書きテキストフィールド
- タイトル置換、タイトル追加、タイトル後のサフィックス追加、リンクへのCSSクラス追加などのオプションを備えた参照エンティティラベル表示用ラベルフォーマッター
- エンティティタイトルの上書き、CSSクラス追加、表示モード変更、任意のtext/string/emailフィールド値の上書きオプションを備えたフルエンティティビュー表示用レンダリングエンティティフォーマッター
- テキストフォーマットで設定した場合のフォーマット済みテキスト(HTML)サポート、リッチコンテンツ上書き用のWYSIWYG編集を有効化
- 順方向リレーションシップ(参照元エンティティから参照先エンティティ)と逆方向リレーションシップ(参照先エンティティから参照元エンティティ)の両方を提供するViews統合
- entity_reference_overrideフィールドを通じたエンティティ関係追跡用のEntity Usageモジュール統合
- エンティティ間の相互参照時の無限ループを防止する再帰レンダリング保護
- 以前のバージョンからのシームレスな移行のためのデータベーススキーマ更新フック(より小さいフィールドサイズ制限からの移行用)
Use Cases
カスタム著者署名付き記事
複数の記事が同じ著者プロフィールを参照する場合、各記事はその著者に異なる署名やタイトルを表示できます。たとえば、ある記事では「Jane Smith博士、CEO」と表示し、別の記事では「Jane Smith、テクノロジーコラムニスト」と表示できます - すべて同じ著者エンティティを参照しながら。
コンテキスト固有の説明付き商品カタログ
異なるカテゴリページから参照される商品エンティティは、商品エンティティを複製することなく、カテゴリ固有のプロモーションテキストや説明を表示できます。上書きテキストはコンテキストに基づいて商品の標準説明を置換または補足します。
セッション固有の経歴付きイベントスピーカー
カンファレンスセッションコンテンツは、スピーカーの一般的な経歴を使用するのではなく、各特定の講演に関連するセッション固有の紹介や資格を提供しながらスピーカープロフィールを参照できます。
カスタムリンクタイトル付きナビゲーションメニュー
コンテンツエンティティを参照するナビゲーションを構築する場合、上書きテキストを使用してコンテンツの実際のタイトルとは異なるメニュー固有のタイトルを提供できます - 短いメニューラベルやコンテキストに適した表現に便利です。
プロモーションテキスト付き注目コンテンツブロック
注目コンテンツセクションは、記事や商品を参照しながら、「編集者のおすすめ」バッジやカスタムティーザーテキストなど、その配置に固有のプロモーションまたは編集コンテキストを追加できます。
関連性コンテキスト付き関連コンテンツ
関連コンテンツを表示する際、上書きテキストで関連性を説明できます:「関連記事: このトピックに関する以前の記事」や「関連: 同じ著者による記事」など。
Tips
- タイトルやCSSクラスなどのシンプルな上書きの場合は、テキストフォーマット設定をNULLに設定してインターフェースをクリーンに保ち、不要なフォーマットオプションを避けてください
- リッチテキスト上書きが必要な場合は、複雑なHTMLがレイアウトを壊すのを防ぐため、最小限のテキストフォーマットを使用してください
- 上書きテキストフィールドは最大4094文字をサポートしており、段落レベルのコンテンツ上書きに適しています
- CSSクラスを上書きする場合は、クラス名が既存のテーマスタイルと競合しないことを確認してください
- レンダリングエンティティフォーマッターでは、変更前にエンティティがクローンされるため、元のエンティティは影響を受けません
- 表示モード上書きを使用する場合のキャッシュへの影響を考慮してください。各固有の上書きは別のキャッシュエントリを作成します
- 再帰レンダリング保護は無限ループを防止しますが、パフォーマンス上の理由から循環参照の作成は避けてください
Technical Details
Hooks 2
hook_entity_usage_track_info_alter
entity_reference_overrideフィールドを通じて作成されたエンティティ関係を追跡するためにEntity Usageモジュールと統合します。Entity Usageが有効な場合、entity_reference_overrideフィールドは標準のentity_referenceフィールドと並んで自動的に追跡されます。
hook_field_views_data
entity_reference_overrideフィールドのViews統合を提供し、順方向と逆方向の両方のリレーションシップを追加します。順方向リレーションシップは参照元エンティティから参照先エンティティへの結合を可能にします。逆方向リレーションシップは特定のエンティティを参照するコンテンツのフィルタリングと表示を可能にします。
Troubleshooting 4
モジュールにはform-fixesライブラリを通じてこの問題のCSS修正が含まれています。問題が続く場合は、管理テーマとのCSS競合を確認してください。
フォーマッター設定のoverride_action設定が試みている上書きのタイプと一致していることを確認してください。フィールド上書きの場合は、ターゲットフィールドが参照エンティティのバンドルに存在することを確認してください。
フィールド追加後にViewsキャッシュをクリアしてください。リレーションシップは参照元エンティティタイプと参照先エンティティタイプの両方のグループの下に表示されるはずです。
テキストフォーマットはフィールド設定で構成する必要があります(ウィジェット設定ではありません)。フィールド設定を編集し、「Custom text format」の下でテキストフォーマットを選択してください。
Security Notes 3
- 上書きテキストはテキストフォーマット設定に従って保存および表示されます。HTMLを許可するテキストフォーマットを使用する場合は、XSS脆弱性を防ぐため適切なフィルタリングが設定されていることを確認してください。
- モジュールは上書き適用前にエンティティをクローンするため、上書きメカニズムを通じて元のエンティティデータが変更されることはありません。
- フィールド権限とエンティティアクセス制御は、参照元エンティティ(フィールドが存在する場所)と参照先エンティティの両方に通常通り適用されます。