Entity Blocks
設定可能なView Modeを使用して任意のEntityを表示する、Field追加可能なBlockを作成できます。
entity_block
インストール
composer require 'drupal/entity_block:^2.0'
composer require 'drupal/entity_block:8.x-1.1'
概要
Entity Blocksモジュールは、サイト管理者がDrupalの任意のEntity(Node、User、Taxonomy Termなど)を参照し、EntityのView Modeを使用して表示するBlockを作成できるようにします。これにより、コンテンツを複製したり手動でカスタムBlockを作成したりすることなく、EntityコンテンツをBlockリージョンに柔軟に配置できます。
このモジュールは、対象Entityへの参照を保存する「entity_block」というカスタムEntityタイプを作成します。各Entity Blockは、選択したView Mode(ティーザー、フル、カスタムView Modeなど)を使用して特定のEntityを表示するように設定できます。Blockはフィールド追加可能なため、必要に応じてEntity Blockに追加フィールドを添付できます。
これは、同じコンテンツを複数のリージョンに表示する必要がある場合、サイドバーで注目コンテンツを紹介する場合、またはソースEntityが変更されたときに自動的に更新される再利用可能なコンテンツBlockを作成する場合に特に便利です。
Features
- 任意のDrupal Entity(Node、User、Taxonomy Term、Commerce製品など)を表示するBlockを作成
- 利用可能なView Modeから選択してBlockでのEntity表示方法を制御
- Entity選択ではタイトルによる簡単なEntity検索のためにオートコンプリートを使用
- 参照されたEntityが変更されるとBlockは自動的に更新
- Entity Blockはフィールド追加可能 - カスタムフィールドを追加して機能を拡張可能
- リージョン割り当てのためにDrupalの標準Block配置システムと統合
- View Modeが定義されているすべてのEntityタイプをサポート
- 互換性のないView Mode(token、queue、rss)の自動フィルタリング
Use Cases
注目コンテンツサイドバー
ティーザーView Modeを使用してサイドバーBlockに注目記事Nodeを表示します。注目記事が更新されると、Blockは自動的に変更を反映します。「node」Entityタイプを対象とし、「article」Bundleと「teaser」View Modeを持つEntity Blockを作成し、注目させる特定の記事を選択します。
著者プロフィールBlock
Blockリージョンにユーザープロフィールを表示します。「user」Entityタイプを対象とするEntity Blockを作成し、表示する著者を選択します。「author_bio」などのカスタムView Modeを使用して、表示するユーザーフィールドを正確に制御します。
商品スポットライト
Commerceサイトでは、プロモーションBlockリージョンに特定の商品を表示します。「commerce_product」Entityタイプを対象とし、スポットライトを当てる商品を選択して、プロモーション表示に適したView Modeを選択します。
カテゴリ説明Block
Blockリージョンにtaxonomy termの説明を表示します。「taxonomy_term」Entityタイプを対象とし、語彙Bundleを選択して、サイドバーにその説明と関連フィールドを表示するtermを選択します。
再利用可能なコンテンツスニペット
様々な再利用可能なテキストBlockを持つ「スニペット」コンテンツタイプを使用します。これらのスニペットNodeを参照するEntity Blockを作成して、重複なしで複数のページリージョンに同じコンテンツを配置します。
Tips
- 他の表示に影響を与えずにEntity Blockに表示されるフィールドを正確に制御するために、Block表示専用のView Modeを作成してください。
- Entity BlockにはBlock管理インターフェースに表示されるため、意味のあるタイトルを使用してください。
- Entity Blockはフィールド追加可能です - 追加のスタイリングオプションを提供するために「背景色」や「CSSクラス」などのフィールドを追加することを検討してください。
- 参照されたEntityへの変更は自動的にBlockに反映されます - Entity Block自体を更新する必要はありません。
- モジュールは「token」、「queue」、「rss」View Modeをフィルタリングします。これらは通常Block表示には適していないためです。
Technical Details
Admin Pages 3
/admin/structure/entity-blocks
Entity Blockを管理するためのメイン管理ページ。作成されたすべてのEntity Blockとその設定詳細(ID、タイトル、対象Entityタイプ、Bundle、View Mode、参照Entity ID)を含むテーブルを表示します。各Blockを編集するためのリンクを提供します。
/admin/structure/entity-blocks/manage/add
新しいEntity Blockを作成するフォーム。対象Entityタイプ、Bundle、View Mode、およびBlockに表示する特定のEntityを選択できます。
/admin/structure/entity-blocks/{entity_block_id}/edit
既存のEntity Blockを編集するフォーム。追加フォームと同じフィールドで、現在の設定が事前入力されています。
権限 1
Hooks 7
hook_entity_info
フィールド追加可能性、Bundle設定、管理パスを含むプロパティを持つentity_block Entityタイプを定義します。
hook_block_info
すべてのEntity BlockをDrupal Blockとして登録し、Entity Blockタイトルをblock infoとして使用します。
hook_block_view
対象Entityを読み込み、設定されたView Modeを使用して表示することでEntity Blockをレンダリングします。
hook_permission
「administer entity blocks」権限を定義します。
hook_menu
Entity Blockの一覧表示、追加、編集のための管理メニューパスと、オートコンプリートコールバックを定義します。
hook_field_extra_fields
表示管理用のentity_block Entityタイプの擬似フィールドを定義します。
hook_schema
entity_blockテーブルのデータベーススキーマを定義します。
Troubleshooting 4
Entity Referenceモジュールが適切にインストールされ有効になっていることを確認してください。オートコンプリート機能はEntity Referenceのハンドラーとオートコンプリートシステムに依存しています。
Entity Blockを作成した後、リージョンに割り当てる必要があります。管理 > サイト構築 > Blocksに移動し、リストからEntity Blockを見つけてリージョンに割り当ててください。
Entityタイプがドロップダウンに表示されるには、少なくとも1つの有効なView Mode(token、queue、rss以外)が必要です。Entityタイプに定義されたView Modeがあることを確認してください。
管理 > サイト構築 > コンテンツタイプ > [タイプ] > 表示の管理(または他のEntityタイプの場合は同等のページ)で対象EntityタイプのView Mode表示設定を行ってください。選択したView Modeでフィールドが有効になっていることを確認してください。
Security Notes 3
- 「administer entity blocks」権限はEntity Blockの完全な制御を付与します。ユーザーはアクセスできる任意のEntityを参照して表示できるため、この権限は慎重に割り当ててください。
- Entity Blockを表示する際にEntityアクセスチェックは実行されません - Blockによって参照されたEntityは、閲覧ユーザーがそのEntityに対する権限を持っているかどうかに関係なく表示されます。機密コンテンツを参照する場合はこれを考慮してください。
- 注意:リストページのアクセスチェックでhook_menu()に「adminiter entity blocks」という誤字があり、「administer entity blocks」の代わりに使用されているため、アクセス問題が発生する可能性があります。