Appearance
Box Configs
Box configs are YAML files with the same name and location as a CMS Partial in your theme.
See YAML Schema for all available options.
Organisation
Folder structure
You can place your custom Box partials anywhere in your active theme's partials directory.
A best practice is to create a boxes sub-folder and place your partials there.
themes/your-theme
partials/
boxes/
homepage/
jumbotron.htm
jumbotron.yaml
generic/
title-text-image.htm
title-text-image.yaml
_mixin_image.yaml
_mixin_colors.yamlSince every Box is referenced by its handle, you can move the files freely at any time.
Handle
The handle property is the only required property of a Box config.
The handle has to be a unique string, other than that, there are no strict rules.
It is suggested to define handles in a homepage-jumbotron or homepage\jumbotron format, but you can use whatever fits your project's requirements.
WARNING
It is important that you do not change the handle once the box is in use. If you do change it, referenced data can no longer be found.
Don't panic
Boxes will warn you if you use the same handle twice.
Section
To group Boxes into sections (like Homepage, Text or Layout) a section key can be defined in the Box config.
Boxes with the same section are displayed together in the Box selector of the Boxes editor.
If no section is defined, Common will be used.
yaml
handle: jumbotron
section: HomepageOrder
The order property can be used to define the order in which the partials are displayed in the selector.
By default, partials are ordered by their name/handle.
yaml
handle: jumbotron
section: Homepage
order: 100 # the higher the number, the later the partial is displayedDynamic Labels
You can specify a dynamic label using the labelFrom property.
If it is set, the Boxes Editor will use the value from the specified field as the label for this partial in the Structure section. This is useful on pages that use the same partial multiple times.
If the specified field is empty the partial's name will be used as fallback.
yaml
handle: box-with-dynamic-label
name: Default name
labelFrom: title # use the "title" as label in the Boxes Editor
form:
fields:
title:
type: text
label: Title # the value of this field will be used
# as the label for this partial in the
# Structure sectionIcon
Use the icon property to define a custom icon for the Box selector in the backend.
You can use Phosphor Icons by specifying the icon name (starting with ph-).
yaml
handle: box-with-phosphor-icon
icon: ph-imageAlternatively, you can use a custom SVG icon. The path to the icon needs to be relative to the site's base path.
yaml
handle: box-with-custom-icon
icon: /plugins/offline/boxes/assets/img/boxes/image.svgMixins
Mixins allow you to re-use common YAML structures in your Box configs.
The filename of a mixin has to start with _mixin but can be placed anywhere in the partials directory of your theme.
A mixin needs a handle and a mixin property, which holds the parts you want to re-use.
yaml
# _mixin_base_fields.yaml
handle: base-fields
mixin:
font_size:
label: Font size
type: dropdown
options:
sm: Small
md: Medium
lg: Large
color:
label: Color
type: colorpickerYou can then use the special mixin type anywhere in a Box config to include these shared structures:
yaml
handle: mixin-example
name: 'I am composed using mixins'
form:
fields:
base-fields: # this references the handle above
type: mixin
title:
label: Titel
type: textThis example would result in the following output:
yaml
handle: mixin-example
name: 'I am composed using mixins'
form:
fields:
font_size:
label: Font size
type: dropdown
options:
sm: Small
md: Medium
lg: Large
color:
label: Color
type: colorpickere
title:
label: Titel
type: textTab attribute for mixins
The tab attribute that is defined on a mixin will be applied to all fields of the mixin.
This allows you to use a mixin in different contexts without having to hard-code a tab name in the mixin.
yaml
handle: mixin-example
name: 'I am composed using mixins'
form:
tabs:
fields:
base-fields:
type: mixin
tab: My Special Tab # will be applied to all fields in the base-field mixinPlaceholder Previews
When a user adds a new Box to a page, a preview of the Box is shown in the editor.
To disable the preview for a single Box, set the placeholderPreview property to false.
yaml
handle: box-without-placeholder-preview
name: 'I do not have a placeholder preview'
placeholderPreview: false
# ...To disable the preview feature for all Boxes completely, set the BOXES_PLACEHOLDER_PREVIEWS_ENABLED configuration option to false.
Example Data
By default, the preview will display each field's label as "data". You can customize this by defining an example property on each field.
You also have access to the Faker library to generate random data. Pass any Faker formatter name as a string to the fake property and optionally define an array of arguments using the args property.
To opt-out of example data generation for a specific field, set the example property to false.
yaml
handle: example-data
name: 'I use example data'
form:
fields:
title:
label: Title
type: text
example: 'An example title'
text:
label: Text
type: textarea
example: # translates to fake()->paragraphs(3)
fake: paragraphs
args: [3]
ignore_me:
label: Some optional field
type: text
example: false # Do not generate any example data for this field