
- MODX 3
- PHP 8.2


Component overview for developers. Connector API: API. Save flows: Flows.
| Layer | Path | Role |
|---|---|---|
| Plugin | core/.../elements/plugins/mxeditorjs.plugin.php | MODX RTE hooks |
| Connector | assets/components/mxeditorjs/connector.php | Manager JSON API |
| Frontend | assets/components/mxeditorjs/js/mxeditorjs.js | Editor.js, MxEditorJsApp |
| PHP | core/components/mxeditorjs/src/ | Renderer, Validator, Repository, MediaUploader, HtmlMigrator |
| Config | src/Config/EditorTools.php | Profiles and tool whitelist |
No snippets or MODX processors in the package.
| Path | When | Where |
|---|---|---|
Client renderPreviewHtml() | Resource form save | mxeditorjs.ts |
Server HtmlRenderer | content/save, migration | PHP |
Duplicate logic for new blocks in both places or manager preview and site HTML will diverge.
Schema: core/components/mxeditorjs/model/schema/mxeditorjs.mysql.schema.xml
mxeditorjs_content | Field | Purpose |
|---|---|
resource_id | UNIQUE, resource ID |
content_json | Editor.js OutputData |
content_version | Version counter |
content_hash | SHA-256 of JSON |
schema_version | Editor.js version from JSON |
created_at, updated_at, created_by, updated_by | Audit |
mxeditorjs_tv_content Same fields + tmplvar_id, UNIQUE (resource_id, tmplvar_id).
14 block types. Alignment via tunes.alignmentTune.alignment for paragraph, header, list, quote.
| Type | HTML |
|---|---|
paragraph | <p> |
header | <h1>–<h6> |
list | <ul> / <ol> |
checklist | <ul class="mxeditorjs-checklist"> |
image | <figure class="mxeditorjs-image"><img> |
gallery | <figure class="mxeditorjs-gallery mxeditorjs-gallery--{fit|slider}"> |
attaches | <p><a download> |
embed | <div class="mxeditorjs-embed"><iframe> |
delimiter | <hr> |
quote | <blockquote> + <cite> |
code | <pre><code> |
raw | raw HTML |
table | <table> |
warning | <div class="mxeditorjs-warning"> |
Extension:
$renderer->registerBlockRenderer('myBlock', function (array $data, array $block): string {
return '<div>...</div>';
});Class MxEditorJs\Config\EditorTools:
DEFAULT_AVAILABLE — CSV of all block toolsPACKAGE_PROFILES — reference default, minimal, blog, fullresolve() — final list with whitelist and upgrade mergemigrateProfiles() / migrateAvailableTools() — add gallery on upgradePriority: enabled_tools → profiles[profile].tools ∩ available_tools (+ upgrade merge) → available_tools.
Allowed types: paragraph, header, list, checklist, quote, table, code, raw, embed, image, gallery, attaches, delimiter, warning.
Sources: assets/components/mxeditorjs/js/src/.
| Module | Purpose |
|---|---|
mxeditorjs.ts | MxEditorJsApp, RTE hooks, syncToTextarea, renderPreviewHtml |
tools/ImageTool.ts | Image + Media Browser |
tools/GalleryTool.ts | Gallery on @kiberpro/editorjs-gallery |
tools/AttachesTool.ts | Attaches + patch-package |
tools/LinkAutocomplete.ts | MODX resource search |
tools/MediaBrowser.ts | Shared browser for Image/Gallery |
tools/ParagraphTool.ts, HeaderTool.ts, ChecklistTool.ts | Wrappers with validate |
Block tools (profile): paragraph, header, list, checklist, quote, table, code, raw, embed, image, gallery, attaches, delimiter, warning.
Always on: inline marker, inlineCode, underline, linkAutocomplete. Tunes: alignmentTune. Plugin: editorjs-undo.
@editorjs/embed has no toolbox button — Paste API only. buildTools() defines services, including RuTube (embedUrl for rutube.ru/video/...). Add custom services in mxeditorjs.ts, not via system settings.
MODx.loadRTE / unloadRTE — main content and TVsMutationObserver — textarea.modx-richtext (except #ta)?v={filemtime} on CSS/JSnpm install # postinstall → patch-package (@editorjs/attaches)
npm run build # IIFE → assets/.../js/mxeditorjs.js
npm run dev # watch + sourcemapEntry: assets/.../src/mxeditorjs.ts. Target ES2020, format IIFE, global MxEditorJs.
Patch patches/@editorjs+attaches+1.3.2.patch replaces appendCallback with rendered or Attaches file dialog will not open.
npm install @editorjs/new-toolbuildTools() (mxeditorjs.ts)ContentValidator::ALLOWED_BLOCK_TYPESHtmlRenderer and renderPreviewHtml()mxeditorjs.available_tools and profilesnpm run build, sync to installed MODXphp _build/build.php
# → core/packages/mxeditorjs-*.transport.zipOn upgrade, transport settings are not overwritten (settings => false). New keys are added by resolvers (resolve.settings.php for gallery).
Resolver resolver_06_metrics.php sends anonymous install stats to https://metrics.modx.pro/.
gallery-front.css loads only in manager. Connect CSS on the frontend manually — see Integration.
| Version | |
|---|---|
| MODX | 3.0.3+ |
| PHP | 8.2+ |
| Node.js | 18+ (frontend build only) |