All notable changes to this project will be documented in this file.
- Multiple Record Sources: New
getRecordSources()override exposes records from several pages/folders at once viaRecordSourceobjects, each with an optional recursiveincludeSubpagesflag anddepth. Replaces the implicit "single pid + direct children" entry point. - Multi-Site Directories: Accessible pages spanning more than one site get site-prefixed labels (e.g.
Site A › News) in the directory dropdown and the new-record modal, disambiguating identically named folders across mandants.
- Workspace Draft Preview: The preview button of a workspace-aware controller opened the live version instead of the draft. The preview URI listener of
EXT:workspacesevaluates the workspace aspect of theContextrather than the backend user, so the module workspace is now passed toPreviewUriBuilder::buildUri()via a dedicatedContextper record.CurrentFrontendWorkspaceManipulationnow runs before page resolution andPreviewSimulatorso that preview mode and the cache bypass are actually activated — previously workspace content could be written into the live page cache. The middleware additionally verifies that the backend user may access the requested workspace. - Workspace Preview from the Editing Form: The view button of the record editing form (route
record_edit) linked to the native workspace split preview module, which expects the workspace to be actively selected, and resulted in an error. The newWorkspacePreviewUriRewriterevent listener keepsEXT:workspacesfrom redirecting there, so every preview URI TYPO3 builds for a manipulated workspace is a direct frontend URI and behaves like the record list view button. Scoped to requests of this extension viaWorkspacePreviewState, regular workspace usage of the installation is unaffected. - Root/First Page Selectable on Create: The new-record modal now lists every accessible page (including the configured root/first page), which was previously excluded so only subpages could be chosen.
- First Directory Filterable: The directory dropdown now has an explicit "All directories" entry and uses a
scopequery parameter, so selecting the first directory filters to it instead of implicitly showing all pages.
getRecordPid()is deprecated since 14.6.0 and will be removed in 15.0.0. ImplementgetRecordSources()instead. Controllers still implementinggetRecordPid()continue to work (the defaultgetRecordSources()falls back to it) but emit anE_USER_DEPRECATEDnotice.
- Controllers implementing only the deprecated
getRecordPid()are unaffected at runtime — the defaultgetRecordSources()reproduces the previous "configured page + direct children" behaviour.
- Multiple Tables Support: Backend modules can now manage multiple tables with a table selection menu
- Table-Prefixed Settings: Module data uses dot notation (e.g.,
tableName.settingKey) for proper table isolation - View Button Dropdown: New unified dropdown in the doc header containing view-related actions
- Template Configurations: Define multiple templates per controller with custom layouts and actions
- Per-Template Actions: Control which buttons/features are available for each template via the
actionsconfiguration - Template Selection: Users can switch between templates from the View dropdown (saved per table)
- New Example Controllers: Added
BeUsersControllerdemonstrating multiple related tables (be_users, be_groups, sys_filemounts) - Root Page Support: Added handling for root-level pages (pageUid = 0)
- Fluid Template Helper: Settings are automatically transformed into nested arrays for easier Fluid template access
- Row Selection: Checkbox, row click, and keyboard shortcuts (Shift+Click, Ctrl/Alt+Click) for selecting records
- Improved Sorting UI: Dropdown menu for sorting in table headers with improved positioning
- Batch Field Editing: Edit specific fields across multiple records from column header dropdown
- Multi-Selection Controls: Check All, Uncheck All, and Toggle Selection buttons in checkbox column header
- Export Functionality: Download selected records and fields in new formats (XLSX, JSON)
- Independent Icon Column: Icon column is now a dedicated table column (always visible by default, positioned after checkbox)
- Configurable Fixed Columns: Both checkbox and icon columns can be hidden per table using
showCheckboxColumnandshowIconColumnflags - Special Columns: New automatically-generated UID and PID columns available in column selector (disabled by default)
- Language Indentation: Moved to the icon column with improved CSS targeting
getTableName(): stringmethod replaced withgetTableNames(): array- Module data settings now use dot notation:
tableName.settingKeyinstead ofsettingKey - Fluid templates require scoped access:
{settings.{table}.settingKey}instead of{settings.settingKey} - Icon Column Architecture: Icons are no longer part of column configuration, now appear as independent column after checkbox
- Removed Properties:
iconandlanguageIndentproperties removed from column configuration - Template Structure: Custom templates overriding
Default.htmlmust be updated to include new icon column structure - CSS Selectors: Language indent selector changed from
td[data-language-indent="1"] > *:first-childtotd.col-icon[data-language-indent="1"]
See MIGRATION.md for detailed migration instructions from 13.x to 14.x.
- List records from any table
- Filter records by any field
- Sort records by any field
- Configurable + sortable columns
- Inline editing support
- Optional workspaces integration