oliverdavies.uk/source/_posts/create-multigroups-drupal-7-using-field-collections.md

60 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Create Multigroups in Drupal 7 using Field Collections
date: 2011-08-28
excerpt:
How to replicate CCKs multigroups in Drupal 7 using the Field Collections
module.
tags:
- cck
- drupal-7
- drupal-planet
- entity-api
- field-collection
- fields
- multigroup
---
One of my favourite things lately in Drupal 6 has been CCK 3, and more
specifically, the Content Multigroups sub-module. Basically this allows you to
create a fieldset of various CCK fields, and then repeat that multiple times.
For example, I use it on this site whist creating invoices for clients. I have a
fieldset called 'Line Item', containing 'Description', 'Quantity' and 'Price'
fields. With a standard fieldset, I could only have one instance of each field -
however, using a multigroup, I can create multiple groups of line items which I
then use within the invoice.
But at the time of writing this, there is no CCK 3 version for Drupal 7. So, I
created the same thing using
[Field Collection](http://drupal.org/project/field_collection) and
[Entity](http://drupal.org/project/entity) modules.
With the modules uploaded and enabled, go to admin/structure/field-collections
and create a field collection.
With the module enabled, you can go to your content type and add a Field
Collection field. By default, the only available Widget type is 'Hidden'.
Next, go to admin/structure/field-collections and add some fields to the field
collection - the same way that you would for a content type. For this collection
is going to contain two node reference fields - Image and Link.
With the Field Collection created, I can now add it as a field within my content
type.
Whilst this works perfectly, the field collection is not editable from the node
edit form. You need to load the node, and the collection is displayed here with
add, edit, and delete buttons. This wasn't an ideal solution, and I wanted to be
able to edit the fields within the collection from the node edit form - the same
way as I can using multigroups in Drupal 6.
After some searching I found
[a link to a patch](http://drupal.org/node/977890#comment-4184524) which when
applied adds a 'subform' widget type to the field collection field and allows
for it to be embedded into, and editable from within the node form. Going back
to the content type fields page, and clicking on 'Hidden' (the name of the
current widget), I can change it to subform and save my changes.
With this change applied, when I go back to add or edit a node within this
content type, my field collection will be easily editable directly within the
form.