wedevelopnl / silverstripe-grid
Grid-based content block system for SilverStripe
Package info
github.com/wedevelopnl/silverstripe-grid
Type:silverstripe-vendormodule
pkg:composer/wedevelopnl/silverstripe-grid
Requires
- php: ^8.3
- silverstripe/admin: ^3.0
- silverstripe/cms: ^6.0
- silverstripe/framework: ^6.0
- silverstripe/vendor-plugin: ^3.0
- silverstripe/versioned: ^3.0
- unclecheese/display-logic: ^4.0
- wedevelopnl/silverstripe-media-field: ^6.0.0-rc3
Requires (Dev)
- cambis/silverstan: ^2.1
- infection/infection: ^0.34
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.1
- phpstan/phpstan-deprecation-rules: ^2.0
- phpunit/phpunit: ^11.3
- tomasvotruba/type-coverage: ^2.0
- wedevelopnl/silverstripe-e2e: 0.1.2
- wernerkrauss/silverstripe-rector: ^1.0
Suggests
- silverstripe/reports: Enables the Grid Elements report in CMS → Reports
- tractorcow/silverstripe-fluent: Required for multi-locale support with isolated element records per locale
Conflicts
This package is auto-updated.
Last update: 2026-07-10 12:42:54 UTC
README
A grid-based content block system for SilverStripe 6 CMS — structured Section → Row → Column layouts with configurable CSS framework adapters (Bootstrap, Tailwind, Bulma).
Requirements
- PHP ^8.3
- silverstripe/framework ^6.0, silverstripe/cms ^6.0, silverstripe/admin ^3.0, silverstripe/versioned ^3.0, silverstripe/vendor-plugin ^3.0
- unclecheese/display-logic ^4.0, wedevelopnl/silverstripe-media-field ^6.0.0-rc3
- Node >= 26 (only needed if you build the frontend yourself)
Optional:
silverstripe/reports— enables the Grid Elements report in CMS Reportstractorcow/silverstripe-fluent— multi-locale support with isolated grid records per locale (see Fluent integration)
Conflict: this module conflicts with
dnadesign/silverstripe-elementaland replaces its functionality.
Installation
composer require wedevelopnl/silverstripe-grid
Then run dev/build?flush=1 to pick up the new database schema and configuration.
Set the required SS_GRID_ADAPTER environment variable to select the active CSS framework adapter — a bundled preset name (bootstrap, tailwind, or bulma, case-insensitive) or the fully-qualified class name of a custom adapter. If it is unset, empty, or invalid the module throws when the container boots. See Grid Adapter System for the full reference.
Usage
Apply GridPageExtension to the page types that should have grid editing:
# app/_config/grid.yml Page: extensions: Grid: WeDevelop\Grid\Extensions\GridPageExtension
Render the grid in the page template:
<% loop $Sections %>$Me<% end_loop %>
That's a working integration. See Template integration for the per-page editor toggle, default-behavior configuration, theme overrides, and the holder chain.
Documentation
Usage guides
- Custom content elements — subclass
ContentElement, register CMS fields, add templates - Template integration —
GridPageExtensionconfiguration, holder chain, theme overrides, extension hooks - Internationalization — translating strings, adding a locale, PHP + JS collectors
Integration guides
- Migrating from Elemental / ElementalGrid —
BuildTask-based upgrade from SS5silverstripe-elemental/silverstripe-elemental-grid - Fluent (multi-locale) support — optional integration with
tractorcow/silverstripe-fluent
Architecture
- Backend architecture — data model, API layer, service design, validation
- Drag and Drop — frontend dnd-kit integration and backend reorder pipeline
- Grid Adapter System — building a new CSS framework adapter
Contributing
- Contributing guide — dev environment, test/coverage/QA commands, pull-request conventions
- E2E fixture protocol — YAML schema, post-actions, dev fixture endpoint
Changelog
See CHANGELOG.md for release history.
License
See LICENSE.