Mikel Larreategi and Lur Ibargutxi: Why We Rebuilt the Wheel: cs_dynamicpages and the Case for Behavior-Driven Classic Layouts

published Sep 25, 2026

Presentation at the Plone Conference 2026

Why did we create yet another page composition add-on? Modern design needs: customers provided Figma designs based on modular blocks.

Comparison with existing add-ons:

  • Mosaic: layout templates, tiles, and custom tiles; complex layout engine, content is not native Plone content
  • collective.contentsections: content-tree based; proliferation of distinct portal_types
  • cs_dynamicpages: 1 container plus 1 row type, behavior driven, with native views.

We have a simple setup: just change the display view. By default it works on Site root, Folders, Language root folders. You can control it via behaviors.

Default row types are in these categories: content, hero, grids/listings, structure/UI.

We give content insight and usage tracking via a control panel. Which row types are being used across the site?

We have some editor tools, like a clear cache button, to clear the (Varnish) cache for the page, when you have edited contents, but it is not showing up yet.

Every Row and Featured item ("column") has a standard Plone workflow. Rows and items are removed from the Plone sitemap and listings. All text is indexed in the main page (Folder).

You can save any configured DynamicPageFolder layout as a named template.

You can define new row types, with as basis for the data (fields) a standard schema.

Future:

  • Maybe single content-type, call everything a block
  • simplify workflow, private/published may be enough
  • specific permissions for templates and fields

Code: https://github.com/codesyntax/cs_dynamicpages