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

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

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

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

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 на #ta (основной контент) и на textarea.modx-richtext кроме #ta (TV)
  3. content/get читает JSON из sidecar
  4. Если JSON пуст и это основной контент: предложение миграции HTML (content/migrate, dry_run)

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

Форма пишет HTML в ресурс или TV, JSON в sidecar. Connector content/save не вызывается.

  1. Клиент (syncToTextarea, задержка 500 ms):
    • HTML → textarea (клиентский renderPreviewHtml)
    • JSON → скрытые поля mxeditorjs_json / mxeditorjs_tv_{id}_json
  2. hookBeforeSubmit сбрасывает актуальный JSON в скрытые поля
  3. Form POST → MODX сохраняет HTML в ресурс/TV
  4. OnBeforeDocFormSave → ContentRepository / TvContentRepository.save(JSON)
  5. Если SHA-256 JSON не изменился, sidecar не перезаписывается. Иначе растёт content_version. Пустой blocks: [] обновляет sidecar (очистка редактора стирает JSON).

На этом пути серверный 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. Окно при открытии ресурса без sidecar, но с HTML
  2. content/migrate?dry_run=1: предпросмотр блоков
  3. Подтверждение → HtmlMigrator.convert() → sidecar + HtmlRenderer → modResource.content
  4. Параметры force, confirmed: перезапись существующего sidecar

Поддерживаются: p, h1–h6, 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
OnTVInputRenderListПуть к elements/tv/input/ (обработчик migxmxeditorjs), если mxeditorjs.enabled
OnDocFormPrerenderКонфиг, ассеты, инициализация
OnBeforeDocFormSaveСохранение JSON в sidecar
OnResourceDeleteОчистка sidecar