フィールドの中にフィールドを作る、つまりフィールドを入れ子に設定したいときに使用するモジュールです。
フィールドをグループ化する Fieldgroup というモジュールがありますが、これは単にフィールドの表示や入力フォームの配置の際にグループ化するだけのもので、フィールドの構造はあくまでフラットです。
これに対してフィールドコレクションはフィールドの構造そのものを入れ子に設定し、複数のフィールドをセットにして1つのフィールドとして扱えるようにします。
例えば料理のレシピサイトを考えてみましょう。1つ1つのレシピをノードで作成することにします。「レシピ」というコンテンツタイプを作り、フィールドの構成を以下のように設定します。
※図が表示されない場合は、ブラウザを最新版にしてください。
ここでは「材料」と「栄養素」のフィールドが入れ子に設定されています。「材料」とその「下準備」、「分量」をセットにして1つのフィールドとして扱うことで、この「値のセット」を複数設置できるようになります。
レシピノードの例としてはこんな感じです。
※図が表示されない場合は、ブラウザを最新版にしてください。
「材料」と「作り方」、「栄養素」のフィールドには、値を複数持たせています。このうち「材料」と「栄養素」の値には、それぞれその中にさらにフィールドがあり、「値のセット」がそれぞれ1つの値となっています。「作り方」にはそういった入れ子の設定はなく、普通に値を複数持たせているだけです。このようにフィールドの入れ子の設定は、値を複数持たせたいときに特に意味が出てきます。
Drupal のコアモジュールだけではこのようなことは出来ないので、その場合は是非とも必要なモジュールですね!
以下に使い方を詳しく。
フィールドコレクションモジュールをインストールした後、「レシピ」コンテンツタイプを作成し、図3 のようにフィールドを設定します。ここで「材料(field_materials)」と「栄養素(field_nutrients)」フィールドのフィールドタイプにはフィールドコレクションを選択します。
「管理」 > 「サイト構築」 > 「Field collections」 にアクセスすると、図3で追加したフィールドコレクションが作成されています。
field_materials のフィールド管理画面です。フィールドコレクションもエンティティなので、ノード、タクソノミータームなどとフィールドの設定様式は同じです。ここで、「材料」、「下準備」、「分量」といった入れ子の下層部分のフィールドを設定します。
ノードの編集画面はこのようになります。「材料」フィールドの下層のフィールド「材料」、「下準備」、「分量」はセットとして扱われ、ここでは値の数を無制限に設定してあるので、値のセットは複数設置できます。