Manage Display

「title」「uid」「created」などのベースフィールドをDrupalの「Manage Display」インターフェースで利用可能にし、サイト構築者がこれらのフィールドをエンティティページ上でどのように表示するかを設定できるようにします。

manage_display
4,832 sites
74
drupal.org

インストール

Drupal 11, 10, 9 v3.0.1
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
TitleフィールドがManage Displayに表示されない

モジュールをインストールした後、Drupalキャッシュをクリアしてください。モジュールはキャッシュされるエンティティタイプ定義を変更します。

Submittedフォーマッターで日付が表示されない

「created」フィールドもManage Displayで有効になっていることを確認してください。Submittedフォーマッターが完全な「○○が○○に投稿」形式を表示するには、「uid」と「created」の両方のフィールドが表示されている必要があります。

Submittedフォーマッターでユーザー画像が表示されない

「uid」フィールドのフォーマッター設定を確認し、ユーザー画像のビューモードが選択されていることを確認してください。また、ユーザーエンティティに画像フィールドが設定されており、ユーザーが画像をアップロードしていることを確認してください。

従来の「投稿情報を表示」オプションがまだ表示される

モジュールはフォームアルターでこのオプションを非表示にします。キャッシュをクリアし、他のモジュールがこの動作を上書きしていないことを確認してください。