Entity Extra Field
サイト管理者がさまざまな追加フィールド(Block、Views、Token、Twigテンプレート、Entityリンク、コンポーネント)を任意のEntityの表示に追加できるようにします。フォーム表示とビュー表示の両方に対応しています。
entity_extra_field
概要
Entity Extra Fieldモジュールは、カスタムコードを書くことなくEntity表示に追加コンテンツを配置するための強力で柔軟な方法を提供します。サイト構築者は、Block、Views、Tokenベースのコンテンツ、Twigテンプレート、Entityリンク、またはSingle Directory Components(SDC)を任意のコンテンツEntityの追加フィールドとして配置できます。
これらの追加フィールドは、Entityビュー表示(訪問者向け)またはフォーム表示(編集者向け)で通常のフィールドと並べて配置できるため、Entityコンテキスト内に追加の動的コンテンツを表示する必要がある複雑なレイアウトに最適です。モジュールには包括的な条件システムが含まれており、特定の条件(ユーザーロール、現在のテーマ、リクエストパスなど)が満たされた場合にのみフィールドを表示できます。
各追加フィールドは設定Entityとして保存されるため、環境間でエクスポートおよびデプロイが可能です。モジュールはDrupalのPluginアーキテクチャに従っており、開発者は6つの組み込みタイプを超えて機能を拡張するためのカスタム追加フィールドタイプPluginを作成できます。
Features
- Blockの設定とコンテキストに完全にアクセスしながら、BlockをEntity表示の追加フィールドとして追加
- コンテキスト引数とTokenベースのオフセットをサポートして、Views表示を追加フィールドとしてレンダリング
- テキストフォーマットをサポートした動的テキストコンテンツ用のTokenベースの追加フィールドを作成
- Entityとグローバルなtwig変数にアクセスできるカスタムTwigテンプレートを追加フィールドとして記述
- Entityリンク(canonical、edit-form、delete-formなど)を設定可能な追加フィールドとして追加
- propとslotのマッピングを使用してSingle Directory Components(SDC)を追加フィールドとしてレンダリング
- Drupalの条件Plugin(ユーザーロール、リクエストパス、現在のテーマなど)に基づく条件付き表示
- Entityビュー表示とEntity編集フォーム表示の両方をサポート
- 多言語サイト向けの設定翻訳を完全サポート
- カスタム追加フィールドタイプを可能にする拡張可能なPluginアーキテクチャ
- Field UIが有効な任意のEntityタイプ(Node、User、Taxonomy Term、Mediaなど)で動作
- Entityタイプ、Bundle、フィールド名、ビューモードごとの詳細なテンプレートオーバーライド用のテーマ候補
Use Cases
ページタイトルをフィールドとして追加
Tokenフィールドタイプで[node:title]トークンを使用して、ページタイトルをコンテンツエリア内の配置可能なフィールドとしてレンダリングし、ページテンプレートではなく他のフィールドの間に配置できます。
関連コンテンツViewを埋め込む
Viewsフィールドタイプを使用して、[node:nid]トークンを使用して現在のNode IDをコンテキストフィルター引数として受け取る「関連記事」Viewを埋め込み、Node表示内に関連コンテンツを表示します。
コンテキスト編集リンクを追加
「edit-form」テンプレートを持つEntityリンクフィールドタイプを使用して、編集権限を持つユーザーにのみ表示される編集リンクを追加し、Entity表示内の任意の場所に配置します。
カスタムBlockをフィールド間に表示
Blockフィールドタイプを使用して、サイドバー領域ではなく特定のコンテンツフィールドの間にプロモーションバナーやコールトゥアクションBlockをレンダリングします。
条件付き著者紹介の表示
著者の経歴情報をレンダリングするTwig追加フィールドを作成し、認証済みユーザーまたは特定のロールにのみ表示されるようにユーザーロール条件を設定します。
デザインシステムコンポーネントをレンダリング
コンポーネントフィールドタイプを使用してSDCカードコンポーネントをレンダリングし、Nodeのタイトルとサマリーをコンポーネントのpropsにマッピングして、サイト全体で一貫したデザインを確保します。
ソーシャル共有ボタンを追加
Blockフィールドタイプを使用して記事コンテンツエリア内にソーシャル共有Blockを埋め込み、特定のコンテンツパスにのみ表示するリクエストパス条件を設定します。
フォームモードのヘルパーテキスト
フォーム表示タイプでTwig追加フィールドを作成して、Entity編集フォーム内に表示される説明テキストやガイドラインを追加し、編集者がフィールド要件を理解するのを助けます。
Tips
- UIサブモジュールは本番環境で無効化してオーバーヘッドを削減できます。追加フィールドの設定は設定Entityとして保存されており、UIがなくても機能します
- テンプレート候補(entity_extra_field__[type]__[bundle]__[field_name].html.twig)を使用して、ベーステンプレートを変更せずにフィールド固有のスタイリングを行えます
- Views引数のToken置換はEntity参照フィールドをサポートしており、参照先EntityのIDをコンテキストフィルターに渡すことができます
- 追加フィールドはEntityのキャッシュタグとコンテキストを尊重し、Entityや設定が変更された際の適切なキャッシュ無効化を保証します
- 複雑なTwigテンプレートの場合、すべてのロジックをテンプレートに入れるのではなく、hook_entity_extra_field_twig_context_alterを実装してカスタム変数を追加することを検討してください
- Block追加フィールドは自動的にターゲットEntityをコンテキストとして受け取るため、コンテキスト対応のBlock(@entity_extra_field.target_entityを使用するものなど)は正しく動作します
- 条件Pluginは再利用可能です。一度条件を設定すると、どの表示モードが使用されてもフィールドがレンダリングされる際に適用されます
Technical Details
Admin Pages 2
/admin/structure/types/manage/{node_type}/extra-fields
Entity Bundleに設定されているすべての追加フィールドを一覧表示します。各追加フィールドのフィールドラベル、フィールドタイプ、表示タイプ(フォームまたはビュー)を表示します。各フィールドの編集、削除、翻訳の操作を提供します。このページはField UIサポートを持つ任意のEntityタイプ(Node、User、Taxonomy Term、Media、Paragraphなど)で動的に利用可能です。
/admin/structure/types/manage/{node_type}/extra-fields/add
Entity Bundle用の新しい追加フィールドを作成するフォーム。フィールド名、表示タイプ、フィールドタイプ、タイプ固有の設定を構成します。追加の条件設定でフィールドが表示されるタイミングを制御します。
権限 1
Hooks 2
hook_entity_extra_field_twig_context_alter
Twigタイプの追加フィールドをレンダリングする際に利用可能なTwigコンテキスト変数を変更します。モジュールがTwigテンプレートコンテキストにカスタム変数を追加できるようにします。
hook_extra_field_type_info_alter
Pluginマネージャーによって検出された追加フィールドタイプPluginの定義を変更します
Troubleshooting 7
追加フィールドを作成した後、「表示を管理」(ビューフィールドの場合)または「フォーム表示を管理」(フォームフィールドの場合)に移動し、新しい追加フィールドを無効セクションから表示内の目的の位置にドラッグしてください。
追加フィールドの設定を変更した後、Drupalキャッシュをクリアしてください。モジュールはパフォーマンスのためにフィールド定義をキャッシュしています。
選択したBlockが適切なアクセス権限を持っていることを確認してください。一部のBlockは、すべてのEntity表示で利用できない特定のコンテキストを必要とします。
Viewにコンテンツがあること、およびコンテキストフィルター(引数)が正しく設定されていることを確認してください。トークンブラウザを使用して、引数の正しいトークン構文を確認してください。
Twigテンプレートは保存時に検証されます。正しいTwig構文を確認してください。{{ entity.field_name.value }}を使用してEntityフィールド値にアクセスします。フォームに記載されている利用可能なコンテキスト変数を確認してください。
コンポーネントフィールドタイプにはSDC(Single Directory Components)モジュールが必要です。Drupal 10.3以降では、SDCはコアに含まれています。それ以前のバージョンでは、contrib SDCモジュールがインストールされていることを確認してください。
「すべての条件をパスする必要がある」チェックボックスを確認してください。オフの場合、いずれかの条件がパスするとフィールドが表示されます。オンの場合、すべての条件がパスする必要があります。各条件を個別にテストしてください。
Security Notes 4
- 「Entity追加フィールドを管理」権限は信頼できる管理者にのみ付与してください。Twigテンプレートは機密情報を公開したり、パフォーマンスの問題を引き起こす可能性があります
- Block追加フィールドは基盤となるBlockのアクセス制御を尊重します。ユーザーが通常Blockにアクセスできない場合、追加フィールドとしても表示されません
- Token置換はclear=TRUEでDrupalのTokenシステムを使用し、未置換のトークンを出力から削除してエンドユーザーにトークン構文が表示されるのを防ぎます
- EntityリンクフィールドはEntityアクセスを尊重します。編集や削除操作へのリンクは、現在のユーザーがそれらの操作の権限を持っている場合にのみレンダリングされます