HOWTOs / Transform Bolt 3 repeaters to Bolt 5 sets and collections
Note: You are currently reading the documentation for Bolt 5.0. Looking for the documentation for Bolt 5.2 instead?
Repeater → collection with 1 set¶
In Bolt 3, the repeater is available as a special field type
that allows an array-type structure of sub-fields within a single field name.
It allowed Editors to repeat those sub-fields as they wish to build the record.
Thus, the repeater field combined two functionalities:
- Allow Editors to add multiple instances of a field (repeat fields)
- Group sub-fields together under one parent field
In Bolt 4, these two functionalities are provided by two distinct fields:
- The
collectionfield allows sub-fields to be repeated (but does not restrict) the order or composition of the sub-fields - The
setfield groups sub-fields together under one parent field
You can read more about Collections and Sets to familiarize yourself with how each field functions.
Example transforming a repeater into a collection with one set¶
Given this definition in Bolt 3
books:
type: repeater
label: Simple repeater example
limit: 3
prefix: "<p>This allows you to create multiple sets of fields. Use the add button at the bottom to create a new empty set.</p>"
fields:
repeattitle:
type: text
repeatcover:
type: image
extensions: [ gif, jpg, png ]
repeatpublicationyear:
type: number
then, the corresponding definition that delivers the same functionality in Bolt 5 would be:
books:
type: collection
label: Simple collection example
limit: 3
prefix: "<p>This allows you to create multiple sets of fields. Use the add button at the bottom to create a new empty set.</p>"
fields:
book:
type: set
fields:
title:
type: text
cover:
type: image
extensions: [ gif, jpg. png ]
publicationyear:
type: number
First, the field named Book (which is of type set) groups all the properties of a book,
i.e. its title, cover image and publication year, into one semantically meaningful field.
Then, the field named Books (which is of type collection) allows Editors to add as many
instances of the field Book as they wish.
In Twig, this can be displayed as follows:
{% for book in record.books %}
<h1>{{ book.title }}</h1>
{{ showimage(book.cover) }}
<p>Year of publication: {{ book.publicationyear }} </p>
{% endfor %}
Blocks → collection with multiple sets¶
In Bolt 3, it the block is available as a special field type
that allows an array-type structure of groups of fields within a single field name.
You can give each of these blocks a name and define the fields that it has.
The Editor can then insert these in the Record as needed.
Thus, the block field combined three functionalities:
- Allow Editors to add multiple instances of a field (repeat fields)
- Group sub-fields together under one parent field
- Allow Editors to manually select which of the available blocks to repeat
In Bolt 4, these three functionalities are provided by two distinct fields:
- The
collectionfield allows sub-fields to be repeated (but does not restrict) the order or composition of the sub-fields - The
setfield groups sub-fields together under one parent field
Example transforming a block into a collection with multiple (two) sets¶
Given this definition in Bolt 3
sections:
type: block
fields:
imagesection:
label: Image with description
fields:
heading:
type: text
image:
type: image
description:
type: html
height: 70px
textsection:
label: Paragraph
fields:
heading:
type: text
content:
type: html
height: 100px
then, the corresponding definition that delivers the same functionality in Bolt 5 would be:
sections:
type: collection
label: Collection with sets
fields:
imagesection:
type: set
label: Image with description
fields:
heading:
type: text
image:
type: image
description:
type: html
height: 70px
textsection:
type: set
label: Paragraph
fields:
heading:
type: text
content:
type: html
height: 100px
First, the two fields named imagesection and textsection group all properties of
the respective section, i.e. (heading, image, description) for imagesection and
(heading, content) for a textsection. Thus, those two groups of sub-fields are
grouped into two semantically meaningful parent fields.
Then, the field named Sections (which is of type collection) allows Editors to add as many
instances of either imagesection or textsection as they wish.
In Twig, this can be displayed as follows:
{% for section in record.sections %}
<h1>{{ section.heading }}</h1> {# the heading exists for both fields. So it is safe to use here #}
{% if section.name === 'imagesection' %}
{{ showimage(section.image) }}
<p>{{ section.description }}</p>
{% elseif section.name === 'textsection' %}
{{ section.content }}
{% endif %}
{% endfor %}
Couldn't find what you were looking for? We are happy to help you in the forum, on Slack or on Github.