imagex / recipe-layout
Layout Builder modules and config for ImageX.
Requires
- drupal/block_library: *
- drupal/bootstrap_layout_builder: *
- drupal/bootstrap_styles: *
- drupal/bootstrap_ui_kit: *
- drupal/ixm_blocks: *
- drupal/layout_builder_blocks: *
- drupal/layout_builder_modal: *
- drupal/layout_builder_restrictions: *
- drupal/section_library: *
This package is auto-updated.
Last update: 2026-08-07 21:39:13 UTC
README
Layout building tools for ImageX Drupal builds: Bootstrap Layout Builder, the IXM custom blocks library, and the Section Library, plus a Layout Builder-enabled Landing Page content type.
Recipes Included
core/recipes/administrator_rolecore/recipes/content_editor_role
Modules Installed
- Block Library
- Bootstrap Layout Builder
- Bootstrap Styles
- Bootstrap UI Kit
- IXM Blocks (with the Accordion, Cards, and Ping Pong submodules)
- Layout Builder (core)
- Layout Builder Blocks
- Layout Builder Modal
- Layout Builder Restrictions
- Media Library (core)
- Menu UI (core)
- Paragraphs
- Section Library
Configuration Highlights
- Defines a
landing_pagecontent type with Layout Builder overrides enabled per node, so editors can build one-off page layouts. - Imports Bootstrap Layout Builder's default breakpoints and column layouts (1-column, and 2-column with 25/75, 75/25, full-width, and equal-width options).
- Sets the Layout Builder Modal width to 85%.
- Grants the
content_editorandadministratorroles the layout-override, custom-block, IXM block, and Section Library permissions needed to build and manage landing pages.
IXM Blocks field-type fixes
ixm_blocks ships some field config that conflicts with, or is internally inconsistent with, the shared field storages it depends on:
field.storage.block_content.bodyis shared by every custom block type. ImageX'sbasic_block_type(fromrecipe-base) installs it astext_long;ixm_blocksships its own copy astext_with_summary. Since the "summary" capability isn't actually used anywhere inixm_blocks_accordion(no template reads it), this recipe keeps thetext_longstorage and overridesixm_blocks_accordion's ownbodyfield instance and form-display widget to match it (config/field.field.block_content.ixm_blocks_accordion.body.ymlandconfig/core.entity_form_display.block_content.ixm_blocks_accordion.default.yml).ixm_blocks_ping_pong_item'sfield_bodyparagraph field ships withfield_type: text_long, even though its own storage (field.storage.paragraph.field_body) and its own form widget both expecttext_with_summary. This recipe overrides the field instance (config/field.field.paragraph.ixm_blocks_ping_pong_item.field_body.yml) to correct the type.
Without these overrides, adding an Accordion or Ping Pong block throws InvalidArgumentException: Property summary is unknown. the first time the block's edit form is built. If ixm_blocks is ever updated upstream to fix these inconsistencies itself, these three override files can be removed.
Installation
Add the recipe to a project with Composer:
composer require imagex/recipe-layout
Then apply it:
drush recipe:apply recipes/recipe-layout
Notes
This recipe uses strict: false, so it only creates configuration that doesn't already exist — it's safe to reapply on a site that already has some of this configuration in place. It depends on recipe-standard (and transitively recipe-base) for the roles, content types, and permissions groundwork it builds on top of.