Manage Display
「title」「uid」「created」などのベースフィールドをDrupalの「Manage Display」インターフェースで利用可能にし、サイト構築者がこれらのフィールドをエンティティページ上でどのように表示するかを設定できるようにします。
manage_display
インストール
composer require 'drupal/manage_display:^3.0'
概要
Manage Displayモジュールは、これまで非表示だったベースフィールドを標準の「Manage Display」管理インターフェースからアクセス可能にすることで、Drupal Coreの表示管理機能を拡張します。これにより、サイト構築者はカスタムコードを書くことなく、タイトル、作成者(uid)、作成日などのフィールドの表示・非表示、フォーマット、配置を制御できます。
このモジュールは新しい仕組みを発明するのではなく、Drupal Coreの既存のフレームワークを使用しており、最終的にはこの機能がDrupal Coreに取り込まれることを目標としています。ノード、タクソノミーターム、ユーザー、コメント、アグリゲーターフィード/アイテムなど、複数のエンティティタイプをサポートしています。
3つのカスタムフィールドフォーマッターが提供されます:設定可能なHTMLタグでラベルフィールドを表示するTitleフォーマッター、古典的な「○○が○○に投稿」形式で作成者と日付情報を表示するSubmittedフォーマッター、コメントスレッド専用のIn Reply Toフォーマッターです。
Features
- ノード、タクソノミーターム、ユーザー、コメント、アグリゲーターコンテンツのベースフィールド(title、uid、created、nameなど)を「Manage Display」インターフェースで利用可能にする
- Titleフォーマッターは、設定可能なHTMLタグ(H1-H5、span、div)でタイトルをラップし、オプションでエンティティへのリンクを追加できる
- Submittedフォーマッターは「[作成者]が[日付]に投稿」を表示し、オプションでユーザー画像を表示でき、ユーザー画像表示用のビューモードを設定可能
- コメントの親参照用のIn Reply Toフォーマッターは、「[件名]への返信 投稿者:[作成者]」を表示し、スクリーンリーダーがディスカッションスレッドを追跡しやすくする
- Manage Displayで制御されるようになったため、コンテンツタイプフォームの従来の「投稿情報を表示」チェックボックスを自動的に非表示にする
- 既存のテーマとの一貫したスタイリングのため、Drupal Coreのインラインフィールドテンプレートを再利用
- コメント専用のsubmittedテンプレートには、アクセシビリティのためのパーマリンクと親コメント参照が含まれる
Use Cases
ノードタイトル表示のカスタマイズ
ブログサイトで、一覧ページでは記事タイトルを全文記事へのリンク付きH2見出しとして表示し、全文記事ページではリンクなしのH1見出しとして表示したい場合。モジュールを有効にし、サイト構築 > コンテンツタイプ > 記事 > 表示管理に移動し、Titleフィールドを表示領域にドラッグして「Title」フォーマッターを選択し、「ティーザー」ビューモード用にタグ(H2)とリンク設定を構成します。「デフォルト」ビューモードではH1でリンクなしに設定して繰り返します。
ユーザー画像付きの作成者情報表示
ブログ投稿に作成者のプロフィール画像付きで「[作成者]が[日付]に投稿」を表示したい場合。コンテンツタイプの表示管理に移動し、「uid」フィールドを「Submitted」フォーマッターで有効にします。フォーマッター設定でユーザー画像のビューモード(例:「コンパクト」)を選択します。投稿行に日付を含めるには「created」フィールドを有効にします。
ランディングページで投稿情報を非表示に
ランディングページのコンテンツタイプで、作成者や日付情報を表示したくない場合。サイト構築 > コンテンツタイプ > ランディングページ > 表示管理に移動し、Title、uid、createdフィールドを「無効」領域にドラッグします。このモジュールにより、カスタムコードなしでこの制御が可能になります。
コメントスレッドのアクセシビリティ改善
アクセシブルなコメントスレッドのために、コメントタイプの表示管理で「pid」(親ID)フィールドを「In reply to」フォーマッターで有効にします。これにより「[件名]への返信 投稿者:[作成者]」情報(デフォルトでは視覚的に非表示)が追加され、スクリーンリーダーユーザーがスレッド化されたディスカッションをナビゲートしやすくなります。
タクソノミータームのタイトルフォーマット
タクソノミータームページでターム名をH1見出しとして表示したい場合。モジュールを有効にした後、サイト構築 > タクソノミー > [ボキャブラリー] > 表示管理に移動し、「name」フィールドをTitleフォーマッターで設定してタグをH1に設定します。
Tips
- Submittedフォーマッターを使用する場合、日付を表示するには「created」フィールドも有効にすることを忘れないでください。「created」が無効の場合、モジュールは日付なしで「[作成者]が投稿」と表示します。
- TitleフォーマッターはCoreのStringフォーマッターから設定を継承するため、タイトルをエンティティにリンクするかどうかも制御できます。
- 異なるビューモード(デフォルト、ティーザー、フル)を使用して、異なるコンテキストでベースフィールドがどのように表示されるかを設定します。
- 「In reply to」フォーマッターはコメントの「pid」フィールドでのみ利用可能です。他のエンティティ参照では表示されません。
- インストール後、モジュールはManage Displayで制御されるようになったため、コンテンツタイプフォームの従来の「投稿情報を表示」チェックボックスを自動的に非表示にします。
- submittedテンプレートは親コメント情報に「visually-hidden」クラスを使用し、視覚的な表示を乱すことなくスクリーンリーダーからアクセス可能にしています。
- submittedテンプレートはDrupalのデフォルトテンプレート構造で動作するよう設計されているため、異なるテーマで表示設定をテストしてください。
Technical Details
Hooks 6
hook_entity_type_build
サポートされているエンティティタイプ(node、taxonomy_term、aggregator_feed、aggregator_item、comment、media)に対して、ベースフィールドのカスタムプリプロセススキップとページタイトルテンプレートレンダリングを有効にします。また、二重表示を防ぐためにユーザーエンティティのラベルキーを「name」に設定します。
hook_entity_base_field_info_alter
setDisplayConfigurable('view', TRUE)を呼び出し、デフォルトの表示オプションを設定することで、ベースフィールドを表示設定可能にします。これがManage Displayでベースフィールドを有効にするコアメカニズムです。
hook_entity_view_alter
ownerフィールドが「submitted」フォーマッターを使用している場合に、submittedレンダー要素を構築します。uidフィールド、createdフィールド、ユーザー画像、親コメント参照を単一のテーマ処理された要素にまとめます。
hook_theme
submitted、submitted__comment、in_reply_to、およびフィールドテンプレートオーバーライドのテーマ実装を定義します。
hook_form_node_type_form_alter
この設定がManage Displayで制御されるようになったため、コンテンツタイプフォームの従来の「投稿情報を表示」チェックボックスを非表示にします。
hook_form_system_theme_settings_alter
Submittedフォーマッターが独自のユーザー画像設定を持っているため、toggle_node_user_pictureとtoggle_comment_user_pictureのテーマ設定を非表示にします。
Troubleshooting 4
モジュールをインストールした後、Drupalキャッシュをクリアしてください。モジュールはキャッシュされるエンティティタイプ定義を変更します。
「created」フィールドもManage Displayで有効になっていることを確認してください。Submittedフォーマッターが完全な「○○が○○に投稿」形式を表示するには、「uid」と「created」の両方のフィールドが表示されている必要があります。
「uid」フィールドのフォーマッター設定を確認し、ユーザー画像のビューモードが選択されていることを確認してください。また、ユーザーエンティティに画像フィールドが設定されており、ユーザーが画像をアップロードしていることを確認してください。
モジュールはフォームアルターでこのオプションを非表示にします。キャッシュをクリアし、他のモジュールがこの動作を上書きしていないことを確認してください。