Skip to content

Architecture & Module Map

When to Use

When you need to understand how Plus Suite's modules relate to each other and which module provides which functionality.

Module Dependency Graph

plus_suite (recipe)
├── navigation_plus (2.3.4) ──── Foundation: Mode/Tool plugin system, Edit Mode toolbar
│   └── twig_events (1.0.1) ──── Template event dispatching for entity wrapping
├── lb_plus (3.6.8) ──────────── Layout Builder UI replacement with nested layouts
│   ├── navigation_plus ────────── Tools register via Navigation+ plugin system
│   ├── tempstore_plus (1.0.4) ── State management via Strategy pattern
│   └── section_library (1.2.2) ─ Reusable section templates (sub-module integration)
├── edit_plus (2.3.0) ─────────── Inline field editing with CKEditor 5
│   ├── navigation_plus ────────── "Change" tool registers via plugin system
│   ├── tempstore_plus ─────────── Entity tempstore for unsaved edits
│   └── field_sample_value (1.0.8) Sample content generation for new blocks
└── dropzonejs (2.11.0) ────────── Media drag-and-drop from desktop

Module Responsibilities

Module Role Key Classes
navigation_plus UI framework, Mode/Tool plugins, hotkeys, sidebar system ModePluginManager, ToolPluginManager, NavigationPlusUi
lb_plus Layout Builder UI replacement, nested layouts, promoted blocks, drag-drop LayoutBuilderPlus (element), NestedAwareSectionStorage, TreeIndex
edit_plus Inline field editing, CKEditor integration, form alterations EditPlusFormTrait, InlineTextarea, ShowFieldWithErrors
tempstore_plus Strategy-based temporary storage for entities and layouts StrategySelector, EntityTempstoreStrategy, LayoutTempstoreStrategy
field_sample_value Pluggable placeholder content for new blocks SampleValueGeneratorManager, SampleValueEntityGenerator
twig_events Event dispatching during template rendering TwigRenderTemplateEvent
section_library Save and reuse Layout Builder sections SectionLibraryTemplate entity
dropzonejs JavaScript library for drag-and-drop file uploads DropzoneJS integration

Data Flow: Page Building Workflow

1. User enables Edit Mode → Navigation+ sets cookie, renders toolbar
2. User selects tool (e.g., Place Block) → Tool plugin activates, loads JS library
3. User drags block from sidebar → lb_plus JS creates drop zone, sends AJAX
4. DropZones controller creates block → field_sample_value populates fields
5. Block rendered inline → twig_events dispatches template events
6. User clicks field to edit → edit_plus Change tool activates
7. Inline form loads → tempstore_plus stores changes
8. User saves → tempstore cleared, entity saved with all changes

Plugin Systems

Plugin Type Manager Provider Module Purpose
Mode ModePluginManager navigation_plus UI modes (Edit, Preview)
Tool ToolPluginManager navigation_plus Actions (Place, Move, Trash, Configure, Duplicate)
SampleValueGenerator SampleValueGeneratorManager field_sample_value Placeholder content for field types

Common Mistakes

  • Enabling modules in random order — enable field_sample_value tempstore_plus twig_events navigation_plus edit_plus lb_plus in dependency order.
  • Assuming all features come from lb_plus — inline editing is edit_plus, tempstore is tempstore_plus, toolbar is navigation_plus.

See Also