Viewfield
Views のディスプレイへの参照を保持するフィールドタイプを提供し、フィールドを含むエンティティが表示されるたびにその Views をレンダリングします。
viewfield
概要
Viewfield モジュールは、管理者やコンテンツ作成者が Views のディスプレイをノード、ユーザー、タクソノミータームまたは Paragraphs などの任意のフィールド可能なエンティティに直接埋め込むことができるエンティティ参照フィールドタイプを定義します。これにより、動的な Views の出力をエンティティ表示内に統合することで、強力なコンテンツ構成が可能になります。
主要な機能として「常にデフォルト値を使用」設定があり、個別のフィールド値の割り当てを必要とせずに、バンドル内のすべてのエンティティに同じ View 設定を自動的に適用します。このモジュールは View の引数での Token 置換をサポートしており、親エンティティからのコンテキストデータを埋め込まれた View に渡すことができます。コンテンツ作成者は表示するアイテム数をオーバーライドでき、無制限のカーディナリティにより単一のフィールドに複数の View ディスプレイを保存できます。
Viewfield はカスタマイズ可能なテンプレートとテーマ候補による包括的なテーマサポートを提供し、出力のスタイリングを容易にします。このモジュールには Drupal 7 の Viewfield インストールからのシームレスなアップグレードのためのマイグレーションプラグインも含まれています。
Features
- 任意のフィールド可能なエンティティ(ノード、ユーザー、タクソノミーターム、Paragraphs など)内に Views ディスプレイを埋め込むためのフィールドタイプ
- View の選択が変更されたときにディスプレイオプションを更新する AJAX 対応ウィジェットによる動的なディスプレイ選択
- 親エンティティからのコンテキストデータを View のコンテキストフィルターに渡すことができる Token ベースの引数サポート
- View の結果を制限しページャーを無効にする表示アイテム数のオーバーライドオプション
- バンドル内のすべてのエンティティに同じ View を自動的に適用する「常にデフォルト値を使用」設定
- コンテンツ作成者が選択できる Views を制限する許可された Views の制限
- 利用可能な View ディスプレイプラグインを制御する許可されたディスプレイタイプの制限(例:block、page、attachment)
- 3つのフォーマッター:デフォルト(View をレンダリング)、タイトルとディスプレイ名(View のメタデータを表示)、レンダリングされたエンティティ(View の結果から個々のエンティティをレンダリング)
- 上部、インライン、非表示、視覚的に非表示の配置を持つ View タイトルの表示オプション
- View が結果を生成しない場合でもフィールドをレンダリングする「常に出力を構築」オプション
- 参照された View を編集するためのクイックアクセスを提供するコンテキストリンク統合
- 広範なテーマフック候補を持つ包括的な Twig テンプレートシステム
- HAL モジュールが有効な場合の REST API シリアライゼーションのための HAL ノーマライザー統合
- 既存の Viewfield データをアップグレードするための Drupal 7 マイグレーションサポート
Use Cases
ノード上の関連コンテンツブロック
共有タクソノミータームでフィルタリングされた関連記事の View を表示するように設定された Viewfield を Article コンテンツタイプに追加します。[node:field_category:target_id] のような Token ベースの引数を使用して、現在のノードのカテゴリを View のコンテキストフィルターに渡します。
ユーザープロフィールのアクティビティストリーム
ユーザーの最近のコンテンツ、コメント、またはアクティビティの View を表示するために、ユーザーエンティティに Viewfield を添付します。[user:uid] Token を引数として使用して、結果をプロフィール所有者にフィルタリングします。
Paragraphs ベースの Layout Builder 代替
コンテンツエディターが長文ページ内にキュレーションされたコンテンツリストを埋め込めるように、Paragraph エンティティに Viewfield を作成します。パラグラフは静的テキストと動的な View 出力を組み合わせることができます。
サイト全体で一貫したおすすめコンテンツ
すべての Article ノードに添付された Viewfield で「常にデフォルト値を使用」を有効にして、ノードごとの設定なしですべての記事ページにおすすめコンテンツの View を自動的に表示します。
フィルタリングされた結果を持つ商品カタログ
そのカテゴリの商品を表示するために、Category タクソノミータームに Viewfield を追加します。ターム ID を引数として渡し、ターム ページを表示するときに関連する商品のみを表示します。
Tips
- 「表示するアイテム数」詳細オプションを使用して、View 自体を変更せずに結果を制限できます。これにより自動的にページャーが無効になります。
- Token ベースの引数は、エンティティ参照をたどる [node:field_ref:entity:field_category:target_id] のような複雑な式をサポートします。
- レンダリングされたエンティティフォーマッターは、個々のエンティティのレンダリングをより細かく制御したい場合に便利ですが、単一値の viewfield でのみ機能します。
- 既存の Views を再利用するのではなく、viewfield 埋め込み専用の Views を作成してください。依存関係が少ない block ディスプレイタイプを使用してください。
- Paragraphs モジュールと組み合わせて、エディターが複数の View 駆動コンテンツセクションを追加できる柔軟なページレイアウトを作成できます。
Technical Details
Hooks 2
hook_help
admin/help/viewfield でアクセス可能な Viewfield モジュールの包括的なヘルプページドキュメントを提供します
hook_theme
viewfield と viewfield_item のテーマフックをレンダー要素と共に登録します
Troubleshooting 5
選択した View に許可されたディスプレイタイプの有効なディスプレイがあることを確認してください。許可されたディスプレイタイプのフィールド設定を確認してください。'block' のみが許可されている場合、block ディスプレイのみが表示されます。すべてのディスプレイタイプを許可するには、すべてのチェックを外してください。
Token の構文が viewfield を含むエンティティタイプと一致していることを確認してください。タクソノミータームの場合は [term:*] Token を使用します。Token ブラウザが表示されるように Token モジュールがインストールされていることを確認してください。
フィールド設定で「常にデフォルト値を使用」が有効になっているかどうかを確認してください。有効な場合、フィールドは編集フォームで非表示になり、設定されたデフォルト値のみを使用します。
HAL ノーマライザーは HAL モジュールが有効な場合のみ登録されます。HAL モジュールがインストールされていることを確認し、サービスが登録されるようにキャッシュをクリアしてください。
migrate_drupal モジュールが有効になっていることを確認してください。viewfield マイグレーションプラグインは D7 の vname(view|display 形式)と vargs フィールドを自動的にマッピングします。ソースの viewfield データ形式を確認してください。
Security Notes 2
- レンダリングされたエンティティフォーマッターは、View 自体が強制する以上の追加のアクセスチェックを実行しません。View レベルのアクセス制限が適切に設定されていることを確認してください。
- Token ベースの引数を使用する場合、ユーザーが制御可能なエンティティフィールド値が、View によって適切にサニタイズされていない場合、View のフィルタリングを操作するために使用される可能性があることに注意してください。