[Drupal]フィールドフォーマッターとは


フィールドフォーマッターとは

フィールドの値を表示するときに、どのように表示するかを決めるもの
Drupalの場合、エンティティのフィールドを作成するとフィールドタイプに応じていくつかのフィールドフォーマッター(以下フォーマッター)が使えるようになっている

設定方法

サイト構築 > コンテンツタイプ > [任意のコンテンツタイプ] > 表示設定から行う

フォーマッターによる見え方の違い

例えばフィールドタイプが「画像」の場合、「画像」、「画像のURL」というフォーマッターが最初からインストールされており、それぞれ以下のように表示のされ方が違う。

フォーマットされていない状態(編集画面)

画像

画像のURL

まとめ(イメージ)

フォーマッターが便利な訳

管理画面で確認できる

さきほど書いたように、「表示設定」からどのフォーマッターを使っているのか一目瞭然なので、表示時にどんな処理がされているか把握しやすい。フィールドタイプごとにデフォルトでインストールされるフォーマッターがいくつかあるのでフィールドの表示はサイトビルディングで完結できる場合も多い

エンティティのディスプレイモードに紐付けられている

「このディスプレイモードのときは、このフィールドはこの方法で表示する」というように紐付けて管理できるので、あらかじめディスプレイモードごとのフィールドフォーマットの設定をドーンと作っておけばhook_preprocessやTwigでちまちまフィールド値を加工する必要がなくなる

  • Twigでフォーマットした値を表示する場合
<!--あらかじめコンテンツタイプの表示設定からフォーマッターを指定しておく-->
<!--contentにノードエンティティが入っている場合-->
{{ content.field_name|view }}
  • フィールド単体のレンダリング配列を取得する場合
// my_image_formatterでフォーマットした画像フィールドのレンダリング配列を取得する.
$node->get('field_image')->view('my_image_formatter');
  • ノード全体のレンダリング配列を取得する場合
// 特定のノードを特定のディスプレイモードのレンダリング配列を取得する.
// 各フィールドの値はフォーマッターでフォーマットされた値が表示される
$view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$view = $view_builder->view($node, 'my_display_mode')

Viewsで使える

「表示設定」で使えるフォーマッターはViewsのフィールドの設定でも選択できる。

簡単にカスタムフォーマッターを作ることができる

プラグインを作成することで、比較的簡単にカスタムフォーマッターを作成できる。デフォルトでインストールされているフォーマッターに要件に見合うものが無ければ自分で追加すればOK

Creating a custom field formatter