Skip to content
  1. Компоненты
  2. mxEditorJs
  3. Для разработчика
  4. Потоки

Потоки (технические)

Схемы сохранения и загрузки контента. Руководство для редакторов: user-guide.

Модель данных

mxEditorJs использует Canonical JSON + HTML snapshot:

  • JSON (Editor.js OutputData) — источник истины в sidecar-таблицах
  • HTML — снимок для фронта в modResource.content или textarea TV

Загрузка формы ресурса

  1. Плагин на OnDocFormPrerender подключает CSS/JS и заполняет window.mxEditorJsConfig
  2. MODx.loadRTE инициализирует Editor.js на #content и на textarea.modx-richtext (TV)
  3. content/get читает JSON из sidecar
  4. Если JSON пуст и это основной контент — предложение миграции HTML (content/migrate, dry_run)

Сохранение через форму MODX (основной путь)

  1. Пользователь нажимает Сохранить
  2. Editor.js отдаёт OutputData
  3. Клиент (syncToTextarea, debounce 500 ms):
    • HTML → textarea (клиентский renderPreviewHtml)
    • JSON → hidden mxeditorjs_json / mxeditorjs_tv_{id}_json
  4. hookBeforeSubmit сбрасывает актуальный JSON в hidden fields
  5. Form POST → MODX сохраняет HTML в ресурс/TV
  6. OnBeforeDocFormSaveContentRepository / TvContentRepository.save(JSON)
  7. Дедупликация: если SHA-256 JSON не изменился, sidecar не перезаписывается. Иначе растёт content_version

При этом пути серверный HtmlRenderer не вызывается. HTML в textarea формирует клиент.

Сохранение через connector

POST content/save + content_json:

  1. ContentValidator
  2. HtmlRenderer → HTML
  3. Запись sidecar
  4. Для основного контента — обновление modResource.content

Используйте для AJAX или кастомных интеграций. TV через connector не обновляют modResource.content.

Миграция HTML → Editor.js

  1. UI: modal при открытии ресурса без sidecar, но с HTML
  2. content/migrate?dry_run=1 — preview блоков
  3. Подтверждение → HtmlMigrator.convert() → save sidecar + обновление HTML
  4. Параметры force, confirmed — перезапись существующего sidecar

Поддерживаются: p, h1h6, ul/ol, blockquote, img, table, pre/code, hr. Не мигрируются: embed, gallery, attaches, checklist.

Медиа

ДействиеConnectorНастройки
Загрузка изображения / галереиmedia/uploadimage_mediasource, image_upload_path
Загрузка вложенияmedia/uploadFilefile_mediasource, file_upload_path
Обзор папокmedia/browsetype=image или type=file

Удаление ресурса

OnResourceDelete удаляет записи в mxeditorjs_content и связанные строки mxeditorjs_tv_content.

Плагин и события

СобытиеНазначение
OnRichTextEditorRegisterРегистрация mxEditorJs в списке RTE
OnDocFormPrerenderКонфиг, ассеты, инициализация
OnBeforeDocFormSaveСохранение JSON в sidecar
OnResourceDeleteОчистка sidecar