Edit on GitHub
Jump to docs navigation

Twig Components / The Fields iterator

Note: You are currently reading the documentation for Bolt 4.0. Looking for the documentation for Bolt 3.7 instead?

The Fields iterator is the combination of a bit of twig, together with two pre-defined templates that come bundled with Bolt. These two files are _fields.html.twig and _fields_blocks.html.twig. We can use Twig's powerful block tag to create a page that outputs all fields in a Record, in the order they're defined in the contenttype. This is great for prototyping an app, where you're not sure about the final structure of a ContentType, or when you're building a theme for others to use.

    {{ block('sub_fields', 'helpers/_fields.twig') }}

This will always assume that there's a Record defined as record, and it will output all eligable fields, including ones you might've output yourself already, like the title and a main image.

We can make it a bit more robust by ensuring we pass in the correct record, instead of merely hoping we get the right one. Additionally, we can pass in a few fields we don't want to output, like the title, and the main image. Below is an example of a snippet that does just that:

    <h1>{{ record|title }}</h1>

    {{ popup(record|image, 1368, 1026) }}

    {% with { 'record': record, 'exclude': [ record|image.fieldname|default() ] } %}
        {{ block('sub_fields', 'helpers/_fields.twig') }}
    {% endwith %}

Here we create a basic but functional output, without having to know about the structure of the ContentType:

  • record|title outputs the title, using the |title Extra.
  • Likewise, we pass record|image to popup, so we can highlight the first image found in the Contenttype.
  • Finally, the lower section will output each of the fields in the Record, in the order they're defined. The with tag defines the scope of the template inside that block, to ensure we don't have other defined variables interfering with the output. with does set two variables, used within its scope:
    • record: set this to the record you'd like to use within the block. Often this can simply be "record", but you can override it, if desired.
    • exclude: allows you to define an array of fields (by name), that should be omitted from the output. In this case record|image.fieldname|default() yields the name of the Image field used before. If the Record has no image, the default() prevents an error, even when Twig is in strict mode.


Edit this page on GitHub
Couldn't find what you were looking for? We are happy to help you in the forum, on Slack or on Github.