Predefined blocks
Predefined content blocks instead of the Content field
Organization: ORG. TEND d.o.o.
Creator: Uroš Likar (theuros)
Screenshots
About Predefined blocks
predefinedBlocks replaces the Content field with a block editor: heading, text and images, table, list, video, wrapper/accordion and chunk/snippet/HTML. Developers restyle each block with a Fenom template in the theme; the rendered HTML is saved into content, so search and teasers keep working.
Requires pdoTools 3. Not for templates that use ContentBlocks.
All blocks have been fully tested and are functional.
Information
Released
November 2, 2026
Supported Database
MySQL
License
GPLv2
Instructions
Documentation: https://modx.tend.si/predefined-blocks
New in 0.6.0-beta
Beta release. Changes since 0.5.0-beta (see changelog.txt in the package for details).
Fixed (data loss)
- A block whose type has no definition (e.g. a block removed in a newer version) was deleted on the next save. Such blocks are now kept, are not rendered, and the editor lists them in a notice.
- A template error (e.g. a Fenom syntax error in a theme override) replaced the blocks with an HTML comment and saved the page, so one typo could empty every page of a template on Clear cache. A page with a render error is no longer saved; the previous content stays and the editor shows a warning.
- A stored value that did not match its field type (e.g. a custom field changed from text to images) stopped the editor, and saving deleted the blocks that were not loaded. Values are now converted; a block that still cannot be shown is listed and saving is disabled.
- Switching the template with unsaved block changes lost them; the switch is now refused until the page is saved.
Fixed (security)
- The rich text sanitizer missed
javascript:links written with numeric character references without a semicolon. - Page titles and image paths in manager error messages were output as HTML; titles of pages the user cannot view are no longer shown.
- The redirect after a scheduled re-render could point to another site (
//host/...); only local paths are used now.