Skip to Content

Sideboxes & Relations

A sidebox is the collapsible listing embedded inside a detail/show page for a resource related to the entity you’re looking at, e.g. an invoice’s translations, notes, or attached files sitting under the invoice itself. Every sidebox is the same read/write flow you’d get on a full listing page, just embedded in a parent’s detail view and adding related records inline instead of on a dedicated page.


Two kinds of relation

Sideboxes are generated from the entity’s metadata. Beyond the normal ORM relations, the CRUD generalizes relationships through a binding (a tablename, optionally plus an id), which splits into two kinds:

RelationBound byWhere it shows
Entity bindingtablename onlyMostly a definition on the entity’s metadata page
Record bindingtablename + idA sidebox on the show page of the detail entity
  • Entity binding relations: CustomProperty, Templates, Email templates, KPI Report, event_subscriber, and (key-dependent) KVS / cache.
  • Record binding relations: Translations, Modifications (LogEntries), storage (entity_file), tags (taggings), Notes, Approvals, and (key-dependent) KVS / cache.

This page covers the record-binding sideboxes on the show page.


How a sidebox behaves

  • Lazy loading — nothing is fetched until the box is opened for the first time (hasBeenOpenedenableFetch()), so a detail page with several sideboxes stays cheap to load.
  • Header actions — a green + opens the quick-add modal, a gear toggles advance options, and a listing button links to the full listing. The translatable flag is passed straight through, so a translatable resource’s quick-add modal gets the TranslatableFields panel (see Lang Translations).
  • Deep-linking — whether a box starts open or closed is driven by a URL param named after the resource ({fqcn}_{resource}_sidebox=1), so a link can point straight at an expanded box.
  • Printing — a sidebox force-opens on beforeprint so its rows aren’t hidden on a printout.
  • No writable properties — when the related entity has no writable properties, the Add button, the Add dropdown, and the Import dropdown are removed from that sidebox (nothing to add).
  • Listing actions — hidden by default inside a sidebox; they’re only available on the full listing page.

Base sideboxes

The base sideboxes are generated on every entity’s show page: Log Entries, Storage / EntityFiles, Taggings, Notes, and Approvals.

Detail/show page with the base sideboxes stacked in the sidebar — Log Entries, Storage, Taggings, Notes, Approvals

Log Entries

Shows when the current record was interacted with: the date it was logged and the action (create, update, remove). It has no writable properties, so the Add button doesn’t appear.

Expanded Log Entries sidebox showing date and action rows, with no Add button

Storage / EntityFiles

The files attached to the record.

Expanded Storage sidebox listing the files attached to the record

Taggings

The tags applied to the record.

Expanded Taggings sidebox showing the tags applied to the record

Notes

Free-form notes attached to the record.

Expanded Notes sidebox with notes attached to the record and the Add action

Approvals

The approval state on the record.

Expanded Approvals sidebox showing the approval state on the record


The translations sidebox

Translations is a record-binding sidebox: the translatable rows for the current record, sitting under it on the show page. Because translatable is passed through, its quick-add modal opens with the TranslatableFields panel, so it edits every locale exactly the way a full page does. See Lang Translations for the read/write flow.

Expanded translations sidebox on a detail page with the add, advance-options, and listing actions


Tracking issue: #1019 (Sideboxes Usage) , and sidebox standardization #1061 .

Last updated on