Custom Field

複数のサブフィールドを単一のデータベーステーブルに格納する柔軟な複数値フィールドタイプ。ParagraphsやEntityリファレンスに代わる高パフォーマンスな選択肢を提供します。

custom_field
1,648 sites
115
drupal.org

インストール

Drupal 11, 10 v4.0.3
composer require 'drupal/custom_field:^4.0'

概要

Custom Fieldは、豊富なWidgetおよびFormatterプラグインをサポートする動的な複数値フィールドを作成できるDrupalモジュールです。Entityリファレンスやparagraphsを必要とする従来のアプローチとは異なり、Custom Fieldはすべてのデータを単一のデータベーステーブルに格納するため、不要なJOINを排除し、設定の複雑さを軽減することで大幅なパフォーマンス向上を実現します。

このモジュールはField Type、Widget、Formatterの包括的なプラグインシステムを提供し、開発者が機能を簡単に拡張できるようにします。各カスタムフィールドには異なるタイプの複数のカラム(サブフィールド)を含めることができ、すべて1つのテーブルに効率的に格納されます。このアプローチは、別個のEntityのオーバーヘッドなしに構造化された複数値データが必要なユースケースに最適です。

Custom FieldはFeeds、Search API、GraphQL Compose、JSON:API、Linkit、Media Library、Entity Browser、AIモジュールなど多くの人気Drupalモジュールと統合されており、複雑なコンテンツアーキテクチャに対応する多用途な選択肢となっています。

Features

  • 最適なパフォーマンスのため、Entityリファレンスなしで単一のデータベーステーブルに格納される複数値フィールド
  • string、text、integer、float、decimal、boolean、email、telephone、URI、link、datetime、daterange、time、time range、duration、file、image、color、map(キー値)、entity reference、UUID、viewfieldを含む26種類の組み込みサブフィールドタイプ
  • text、textarea、select、radios、checkboxes、autocomplete、日付ピッカー、カラーボックス、ファイルアップロード、Media Library統合を含む39種類のサブフィールド用Widgetプラグイン
  • 6種類のメインField Formatter:Default(カスタムテーマフック)、Inline、HTML List、Table、Flipped Table、Token対応のCustom Template
  • レスポンシブブレークポイントを備えたインラインWidget配置のためのCSS Flexboxベースのレイアウトシステム
  • 任意のEntityタイプの既存カスタムフィールドからフィールド設定をクローン
  • Drushコマンドまたはプログラムによる既存データを持つフィールドへのカラムの追加・削除
  • コンテンツ翻訳統合によるサブフィールドレベルの翻訳サポート
  • カスタムフィルター、ソート、引数ハンドラーを備えた完全なViews統合
  • 基本および高度なToken置換オプションを備えたすべてのサブフィールドのTokenサポート
  • カスタムフィールドへのデータインポートのためのFeeds統合
  • リンク、時間値、その他のフィールドタイプの包括的なバリデーション制約

Use Cases

製品仕様

重量、寸法、素材、色、価格のサブフィールドを持つカスタムフィールドを作成。製品仕様シートとしてテーブルFormatterで表示。各仕様ごとに別々のフィールドやParagraphsを必要としません。

イベント情報

タイムゾーンサポート付きのdaterangeサブフィールドを、場所(string)、チケットURL(link)、価格(decimal)サブフィールドと組み合わせて使用。FlexboxWidgetでこれらをインライン配置し、テーブルFormatterできれいなイベントリストを作成。

連絡先カード

名前(string)、メール(email)、電話(telephone)、ウェブサイト(link)、写真(image)サブフィールドを組み合わせ。コンパクトな表示にはインラインFormatter、スタイル付き連絡先カードにはカスタムテーマを使用したデフォルトFormatterを使用。

住所コンポーネント

通り、市区町村、都道府県、郵便番号、国を適切なバリデーション付きの個別サブフィールドとして格納。一貫性のためにコンテンツタイプ間で設定をクローン。シンプルなユースケースではAddressモジュールより効率的。

メディアギャラリーメタデータ

imageサブフィールドにキャプション(string_long)、撮影者(ユーザーへのentity_reference)、撮影日(datetime)、場所(座標用map)を使用してメディアアイテムにメタデータを添付。

シンプルな構造でのParagraphs代替

チームメンバープロフィール、FAQアイテム、機能リストなどの繰り返し構造データには、Entityのオーバーヘッドを排除しクエリを簡素化することで、カスタムフィールドがParagraphsより優れたパフォーマンスを提供。

APIデータストレージ

mapサブフィールドを使用して構造化されたAPIレスポンスデータを、タイムスタンプ、ステータス、リファレンスフィールドと組み合わせて格納。JSON:APIサブモジュールがヘッドレス実装のための適切なシリアライゼーションを保証。

Tips

  • 新しいカスタムフィールドを作成する際は「設定をクローン」機能を使用して既存のフィールドから設定をコピーし、セットアップ時間を大幅に節約できます。
  • 大規模なデータセットで最高のパフォーマンスを得るには、リビジョンやモデレーションなどの完全なEntity機能が不要な場合はParagraphsよりカスタムフィールドを選択してください。
  • Token対応のCustom TemplateFormatterは、ViewのオーバーヘッドなしにViewsライクな書き換え機能を提供します。
  • Drushコマンド(cf-add-column、cf-remove-column)を使用して、既存データを持つフィールドのフィールド構造を安全に変更できます。コマンドは自動的にデータを保持します。
  • 空の場合に行の削除をトリガーすべきサブフィールドで「空をチェック」を有効にし、部分的に入力された複数値アイテムを防止します。
  • カラム設定付きのFlexboxWidgetにより、追加モジュールなしでInline Entity Formに似たフォームレイアウトを作成できます。
  • メディアへのEntityリファレンスには、完全なMedia Library統合を得るためにcustom_field_mediaサブモジュールを有効にしてください。
  • タクソノミーターム用の階層セレクトWidgetとFormatterを使用して、完全な階層パスでタームを表示・選択できます。

Technical Details

Hooks 2
hook_custom_field_link_attributes_alter

モジュールが利用可能なリンク属性を変更できるようにします

hook_custom_field_tags_alter

モジュールが利用可能なHTMLラッパータグを変更できるようにします

Drush Commands 2
drush custom_field:add-column

データを保持しながら既存のカスタムフィールドに新しいカラム(サブフィールド)を対話形式で追加します

drush custom_field:remove-column

既存のカスタムフィールドからカラム(サブフィールド)を対話形式で削除します