logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

9.10.2. Drupal Fields API。Field Formatter:ページにデータフィールドを表示する

02/10/2019, by mikhail

Menu

この記事では、フィールドの表示を編集してページに表示できる Field Formatters を検討します。 

過去の記事で、Link フィールドタイプを作成しました。この記事では、これらのフィールドがページにどう表示されるか、そしてどのクラスがそれを担当するかを見ていきます。Drupal を通じて追加する各フィールドは、ページに表示でき、Manage display ページでその設定を編集できます。 

manage display

Format 列で、フィールドの表示方法を選べます。この列は Field Formatter クラスによって形成されます。ページへのリンクを表示する Link モジュールのクラスを見てみましょう:

core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php

クラスのアノテーションは、このフォーマッターがどのタイプのフィールドに属するかを示します。

/**
 * Plugin implementation of the 'link' formatter.
 *
 * @FieldFormatter(
 *   id = "link",
 *   label = @Translation("Link"),
 *   field_types = {
 *     "link"
 *   }
 * )
 */

このファイルで主に関心があるのは viewElements() メソッドです。このメソッドは、ページへのデータの出力を担当します。フォーマッターはデータベースにリクエストを送らず、変数 $items からデータを取る点に注意してください。エンティティからのレンダリング済みデータが $items に渡されます。したがって、データ入力の Field Widget、データ保存の Field Storage、データ出力の Field Formatter というクラスの責任の分離があります。これは非常に便利です。というのも、異なるレベルでデータをキャッシュできるからです。例えば、出力や Field Formatter の設定が変わっても、ノードのキャッシュをリセットする意味はありません。データは変わらず、その出力だけが変わるからです。デバッグや新しい機能の追加にも便利です。出力だけを変える必要がある場合は、フィールドタイプに新しい Field Formatter を追加して、独自の出力を書きます。

また、LinkFormatter クラスには settingsForm() メソッドがあり、Manage display ページでのフォーマッターの構成を担当します。Form API を通じて、フィールドの設定フィールドを追加し、これらの設定を構成に保存できます。

Link モジュールにはもう 1 つフォーマッターがあります:

core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php

これは通常の LinkFormatter から継承されていますが、1 つ違いがあります。このフォーマッターには別のテンプレートが接続されています:

core/modules/link/templates/link-formatter-link-separate.html.twig

したがって、フィールドを出力する HTML は、テンプレートを通すことで得られます。そしてフォーマッターは、複数値フィールドの各値に対して $delta を通じてデータを書き込む $element ファイルを形成するだけです。

ご覧のとおり、Field API はかなりシンプルで使いやすいです。次の記事では、Storage、Widget、Formatter を持つ独自のタイプのフィールドを書きます。