mpcVisualEditor

Визуальный редактор контента
Версия 1.2.11-rc
Дата выпуска 25.09.2026
Загрузки 6
Просмотры 668
mpcVisualEditor (mpcVE)

Вступление

Визуальный фронт-редактор контента для сайтов на migxpageconfigurator (mpc). Администратор правит содержимое страниц прямо на фронте (inline), не заходя в админку. Сохранение идёт в те же хранилища, что использует mpc: TV mpc_config, lexicon-файлы (переводы), нативные поля ресурса и произвольные TV.

Что умеет

  • Inline-редактирование прямо на странице, по одному полю: правка сохраняется сразу, без перезагрузки и без перезаписи всей страницы.
  • Поля любого типа: текст, textarea, форматированный текст (RTE), ссылки, изображения, picture/video/audio, а также TV-типы listbox, checkbox, tags, число, дата, файл.
  • Списки (повторяющиеся блоки): добавление, удаление и перетаскивание строк, загрузка картинки в строку.
  • Боковая панель секций: порядок (drag-drop), показ/скрытие секции, переключение «статическая секция».
  • Панель скрытых полей: правка полей, которых нет в разметке страницы (настройки секции, стили, произвольные поля). Требует mpc 2.5.4+.
  • Встроенный файловый менеджер (на modMediaSource): обзор, загрузка, создание папок, переименование и удаление, выбор существующего файла — прямо из редакторов изображения, медиа и файловых TV.
  • История изменений: кто, когда и что менял, с пословным diff и откатом. Логируются правки и из редактора, и из админки.
  • Блокировка ресурса: пока страницу правит один администратор, другой не откроет её на редактирование (TTL = idle-таймаут, настраивается).
  • Мультиязычность: правка значений лексиконов с учётом текущего языка.
  • Кнопки в тулбаре: очистить кэш сайта, открыть текущий ресурс в админке.


Требования и зависимости

  • MODX Revolution 2.8.x
  • PHP 7.4+
  • migxpageconfigurator (mpc) 2.4.0+ — ЖЁСТКАЯ зависимость. mpcVE надстраивается над mpc и использует его address-space, edit-mode рендер и фасад. Для панели скрытых полей нужен mpc 2.5.4+.
  • pdoTools (приходит вместе с mpc; нужен для рендера страниц).


Как пользоваться

  1. Дайте роли пользователей право (permission) mpcve_edit — оно проверяется при входе в режим правки. При сохранении дополнительно проверяется право save на конкретный ресурс (нельзя править чужое в обход).
  2. Откройте нужную страницу с query-параметром:
    ?mpcedit=1
    (имя параметра задаётся настройкой mpcve_edit_param, по умолчанию mpcedit).
  3. На странице появятся маркеры редактируемых блоков и тулбар. Кликаете блок — правите в открывшемся редакторе — изменение сохраняется сразу в хранилище mpc.

Мастер-выключатель всего пакета — системная настройка mpcve_active. Для работы также требуется включённая настройка mpc_edit_mode (пакет migxpageconfigurator) и перенарезка страниц — иначе в чанках нет data-mpc-* маркеров и редактор не подключится (предупреждение пишется в системный лог).

Наследуемые секции и типы страниц

При правке секции, унаследованной из типа, редактор предупреждает: «Изменения затронут все страницы этого типа». Можно продолжить правку типа или нажать «Локализовать секцию» — секция будет скопирована в текущий ресурс. Сам ресурс-типа предупреждает: «Изменения затронут все страницы данного типа». Источник типов определяется эффективным mpc_static_block_page_id: глобальная настройка использует общие типы из web, контекстное переопределение — собственные типы контекста. Лексиконы сохраняют текущий язык; статические секции остаются глобальными.



Системные настройки

  • mpcve_active — включить/выключить пакет (по умолчанию: Да).
  • mpcve_edit_param — query-параметр входа в режим правки (по умолчанию mpcedit →
    ?mpcedit=1
    ).
  • mpcve_permission — имя требуемого permission (по умолчанию mpcve_edit).
  • mpcve_max_upload — лимит размера загружаемого изображения, байт (по умолчанию 10485760 = 10 МБ; 0 — без лимита).
  • mpcve_lock_ttl — TTL блокировки ресурса = idle-таймаут, сек (по умолчанию 300).
  • mpcve_allowed_attrs — белый список HTML-атрибутов для очистки содержимого редактируемого поля (по умолчанию class,href,src,alt,title). Обработчики
    on*
    ,
    javascript:
    и опасный
    style
    режутся всегда, независимо от этой настройки.

1.2.11-rc

  • ДОБАВЛЕНО: разметка полей только для редактора — атрибуты data-mpcve-. Схема та же, что у data-mpc-: data-mpcve-field > data-mpcve-item > data-mpcve-field-1 > data-mpcve-item-1 > data-mpcve-field-2 …, тип поля — data-mpcve-ftype, лимит строк — data-mpcve-max. Нарезка эти атрибуты не читает, поэтому ими можно разметить собственный вывод поля (например, чанк сниппета), где цепочка data-mpc- создала бы второе поле и при обновлении затёрла бы контент. Префиксы в одной цепочке можно смешивать. Секция и её признаки (data-mpc-section, -static, -name, -res) по-прежнему только data-mpc-.
  • ИСПРАВЛЕНО: в панели «Скрытые поля» список строк, у которых есть подполе img, показывался как одна картинка, а текстовые подполя строк были недоступны. Теперь такой список открывается редактором строк — как уже было во вкладке полей секции.

1.2.10-rc

  • ИСПРАВЛЕНО: после обновления пакета браузер мог показывать редактор со старыми стилями и скриптами из своего кэша. Теперь стили и все скрипты редактора подключаются с меткой версии (время изменения файла), и после обновления браузер сразу берёт свежие файлы. Если на странице уже есть своя карта импортов (importmap), метка ставится только у стилей и главного скрипта редактора.

1.2.9-rc

  • ИСПРАВЛЕНО: в редакторе форматированного текста списки выглядели как обычные абзацы, если стили сайта убирают у списков маркеры и номера. Теперь при правке маркированный список всегда показывается с маркерами, а нумерованный — с номерами, независимо от стилей сайта. На вид списков на самой странице это не влияет.

1.2.8-rc

  • ДОБАВЛЕНО: исходный текст фрагмента, который сайт показывает обработанным. Если внутри поля есть элемент с атрибутом data-mpcve-raw, редактор перед открытием подставляет вместо него значение атрибута. Так в словарь сохраняется исходник, а не то, что показано на странице. Пример — метка единиц измерения, которую сайт разворачивает в «36 x 54 x 13 cm» или «14.17 x 21.26 x 5.11 in». Атрибут необязателен: без него поле читается как раньше.

1.2.7-rc

  • Уточнено описание проверки прав на фронте: право из политики видно на веб-контексте, если политика с этим правом назначена группе пользователя на веб-контекстах. Проверено на сайте; правок поведения нет.

1.2.6-rc

  • ИСПРАВЛЕНО: список строк, у строк которого есть картинка, редактор принимал за одиночную картинку: в панели «Поля секции» вместо списка показывалась кнопка «Редактировать картинку», и сам список отредактировать было нельзя. Заодно сохранение из такой кнопки записывало картинку первой строки на уровень секции — лишний ключ в конфиге.
  • ИСПРАВЛЕНО: в списках, выведенных слайдером в режиме бесконечной прокрутки (Swiper loop, slick), правка строки уходила в соседнюю: слайдер добавляет в разметку копии слайдов, и они сбивали нумерацию строк. Теперь копии не учитываются, а номер строки берётся у оригинала.

1.2.5-rc

  • ИСПРАВЛЕНО: правка одинаковых секций на странице (например трёх «Card grid» подряд) уходила в первую из них: и текст, и картинки, и кнопка «Локализовать секцию», и порядок в панели секций. Редактор различал секции по имени ТИПА, общему у всех копий. Теперь секция адресуется собственным именем, а имя типа остаётся запасным вариантом — для страниц, отрендеренных старой версией migxPageConfigurator (требуется 2.5.67-rc и новее).

1.2.4-rc

  • ИСПРАВЛЕНО: палитра символов «Ω» в редакторе текста с форматированием обрезалась правым краем окна редактора. Теперь она раскрывается влево от кнопки и видна целиком.

1.2.3-rc

  • ИСПРАВЛЕНО: поля, у которых маркер стоит на обёртке-«призраке» (обёртка помечена как снимаемая и в вёрстке не участвует), выглядели нередактируемыми: ни рамки, ни подсветки при наведении, ни бейджа типа. Такая обёртка не создаёт собственной области на странице, поэтому рисовать подсветку было не на чем. Теперь для них рисуется одна общая рамка поверх страницы — по области, которую занимает содержимое поля; при наведении она подсвечивается и показывает бейдж типа, во время правки зеленеет, как у обычных полей. Рамка следует за содержимым при прокрутке, изменении размера окна, правке текста и догрузке картинок.
  • ИСПРАВЛЕНО: пустое поле на такой обёртке нельзя было заполнить — по нему не получалось кликнуть. В режиме правки ему возвращается минимальная высота и показывается подпись-плейсхолдер, как у остальных пустых полей.

1.2.2-rc

  • ИСПРАВЛЕНО: картинка, открытая из панели «Скрытые поля», показывалась пустой — было непонятно, что именно правишь. Превью бралось только из элемента страницы, а у скрытого поля его нет по определению. Теперь при отсутствии элемента миниатюры и основной картинки, и каждого источника берутся из самой записи (готовый preview, иначе путь; ключ лексикона разворачивается в значение).
  • ИСПРАВЛЕНО: сохранение такой картинки из панели затирало alt пустым и сбрасывало сохранённое превью записи — alt тоже читался только из элемента страницы.

1.2.1-rc

  • ИСПРАВЛЕНО: установка пакета больше не стирает права политики «Administrator». Резолвер прогонял поле data политики через json_decode(), хотя MODX отдаёт его уже массивом: декодирование возвращало null, и политика сохранялась с одними лишь правами редактора, теряя все остальные.
  • ИСПРАВЛЕНО: права mpcve_edit и mpcve_edit_global регистрируются как записи шаблона политик, а не только внутри политики. Раньше первое же сохранение политики через админку вычищало их (админка пишет только права, известные шаблону), и панель редактора пропадала у всех, кроме sudo-пользователей.

1.2.0-rc

  • НОВОЕ: в редакторе текста с форматированием появилась кнопка «Ω» — палитра популярных HTML-сущностей: неразрывный пробел и мягкий перенос, длинное и короткое тире, кавычки-ёлочки и лапки, многоточие, знак умножения, ±, °, ©, ®, ™, стрелка. Символ вставляется в место курсора и заменяет выделение.
  • НОВОЕ: системная настройка mpcve_rte_entities задаёт состав палитры. Пусто — набор по умолчанию; принимаются и имена сущностей (nbsp, mdash), и числовые ссылки (#8212, #x2014), через запятую.
  • ИСПРАВЛЕНО: окно редактора больше не закрывается, если выделение текста мышью началось внутри карточки, а кнопка отпущена за её пределами (и наоборот, если выделение начато на затемнённом фоне и закончено в карточке). Раньше в этом случае несохранённая правка терялась.
  • ВНУТРЕННЕЕ: общий каркас модальных окон вынесен в одну фабрику, поэтому Escape, закрытие по фону и кнопка отмены работают одинаково во всех окнах редактора.

1.1.0-rc

  • НОВОЕ: перед правкой секции, наследуемой от ресурса-типа, редактор явно предупреждает «Изменения затронут все страницы этого типа». Можно продолжить правку типа либо нажать «Локализовать секцию» — тогда секция копируется в текущий ресурс и дальнейшие изменения становятся локальными.
  • НОВОЕ: при правке самого ресурса-типа показывается предупреждение «Изменения затронут все страницы данного типа». Локальная секция обычного ресурса открывается как раньше; статичные секции сохраняют прежнюю глобальную логику.
  • ИСПРАВЛЕНО: standalone-коннектор восстанавливает фактический контекст открытой страницы до чтения настроек и записи. Поэтому системный mpc_static_block_page_id направляет общие типы в web, а контекстное переопределение оставляет типы и секции внутри этого контекста. Лексиконы по-прежнему пишутся для текущего языка.

1.0.20-rc

  • ВНИМАНИЕ: версия требует migxpageconfigurator 2.5.56 или новее — политика имён и событие живут там. При установке поверх старого mpc в лог пишется явная причина (резолвер), установка не блокируется: обновление mpc следом чинит ситуацию.
  • НОВОЕ: правила именования файлов и папок редактора переопределяются проектом через событие mpcOnSanitizeFileName (пакет migxpageconfigurator, версия 2.5.56 и выше). Один плагин покрывает и редактор, и грабер: патчить код пакета ради своих правил имён больше не нужно.
  • ИСПРАВЛЕНО: mkdir() и rename() в файловом менеджере не нормализовали имя — локальный sanitize сохранял Unicode и регистр, поэтому кириллица, пробелы и заглавные доезжали до диска в обход naming convention. Теперь оба идут через ту же единую точку, что и загрузка (папки — snake_case, файлы — kebab-case). Запрет переименования в исполняемое расширение (image.jpg → shell.php) проверяется ДО нормализации: иначе отказ превратился бы в молчаливое переименование в shell-php.jpg.
  • ИСПРАВЛЕНО: ручная загрузка при совпадении имени полагалась на upload_check_exists ядра и отдавала ошибку, тогда как загрузка по ссылке молча давала суффикс -2/-3. Поведение сведено к одному: суффикс в обоих потоках, без перезаписи чужого файла. Дедуп применяется ПОСЛЕ события проекта — имя, назначенное плагином, тоже не должно ничего затирать.
  • ИЗМЕНЕНО: '_' в имени файла уходит в дефис (kebab-case), добавлен лимит длины и предсказуемое имя-фолбэк. Затрагивает только новые файлы.
  • ВНУТРЕННЕЕ: MediaLibrary и FileManagerHandler больше не держат собственных копий политики имён, блок-листа исполняемых расширений и cleanPath — делегируют единой точке mpc. Именно расхождение таких копий и приводило к тому, что security-правки жили в одном месте, а дыра оставалась в другом.

1.0.19-rc

  • EDIT-MODE: CSS-правило [data-mpc-unwrap]{display:contents !important} — обёртки с маркером поля, которые каттер в режиме правки оставляет (чтобы редактор нашёл адрес поля), не влияют на вёрстку (ведут себя как снятые). Парно с фиксом каттера в migxpageconfigurator 2.5.54-rc.

1.0.18-rc

  • НОВОЕ: «вставил ссылку → скачалось» — загрузка медиа по внешнему URL прямо из редактора. Поле URL + кнопка «Загрузить по ссылке» в редакторах изображения, видео/аудио и picture (на основной файл, poster и КАЖДЫЙ вложенный ), а также кнопка «🔗 По ссылке» в файловом менеджере (покрывает и file-TV). Экшен files/download-url (Connector + FileManagerHandler::downloadUrl) качает тем же общим механизмом, что грабер вёрстки (RemoteMediaIngestor из mpc): SSRF-гард, нативные события (плагины-конвертеры), валидация типа/контента тем же ядром MediaLibrary, что и ручная загрузка. Ручной upload не затронут.
  • НОВОЕ: настройки mpcve_url_download_enabled (вкл/выкл) и mpcve_url_download_timeout (таймаут скачивания, сек — держать меньше серверного max_execution_time/fastcgi_read_timeout). Синхронно с жёсткими лимитами: размер ≤ mpcve_max_upload, на превышении/таймауте — понятная ошибка с предложением загрузить вручную; на клиенте AbortController, чтобы UI не висел.
  • Файлы: js/api.js, js/editors/urlrow.js (новый), js/editors/{image,media,picture}.js, js/filemanager.js, css/overlay.css, лексиконы.

1.0.17-rc

  • ИСПРАВЛЕНО: кнопка-триггер скрытых полей блока/строки иногда была не видна — она рендерилась внутрь блока с position:absolute и обрезалась overflow:hidden, схлопывалась нулевой высотой строки или перекрывалась оформлением. Теперь триггеры выносятся в отдельный портал-слой (position:fixed поверх страницы), а позиция каждой кнопки считается от getBoundingClientRect блока и пересчитывается на скролле/ресайзе. Файлы: js/panels.js, css/overlay.css.

1.0.16-rc

  • ИСПРАВЛЕНО: thumbnailType источника читался через getOption() (без передачи свойств источника он всегда возвращал дефолт 'png') → для JPEG искался кандидат base.png, конвертированный base.webp не находился, происходил откат на исходный .jpg, которого после конвертации нет → 404. Теперь свойство читается штатно через getPropertyList()['thumbnailType'].

1.0.15-rc

  • ИЗМЕНЕНО: финальный URL/путь загруженного файла после возможной конвертации (jpg→webp плагином проекта) резолвится строго ОТ ИСТОЧНИКА файлов, без знания о конкретном плагине. Два детерминированных кандидата: имя от ядра (fileHandler->sanitizePath) и base.; если на диске оба (конвертер не удалил оригинал) — берётся новее по mtime. Прежний контракт через свойство источника (sgUploads) убран — mpc больше не знает о проектных плагинах.

1.0.14-rc

  • ИЗМЕНЕНО: каноническая папка типа резолвится строго ОТНОСИТЕЛЬНО базы источника файлов mpc (по mpc_download_paths), без префикса удалённой настройки mpc_media_path. Поведение на штатной установке не меняется (настройка и так была пустой). Требует mpc 2.5.47-rc+.

1.0.13-rc

Загрузка файлов редактора — единый нативный пайплайн MODX.

  • ИЗМЕНЕНО: все загрузки редактора идут через ОДИН экшен files/upload и нативный modMediaSource::uploadObjectsToContainer() (тот же путь, что у файл-менеджера MODX): события OnFileManagerBeforeUpload/Upload отрабатывают, проектные плагины применяют свою политику (whitelist, транслитерация, конвертация формата). Отдельный экшен image/upload и класс ImageUploadHandler удалены — их роль выполняет FileManagerHandler.
  • НОВОЕ: загрузка и «Выбрать существующий» идут в ПАПКУ ТЕКУЩЕГО файла поля (drag-drop кладёт картинку рядом с уже выбранной; менеджер открывается в той же папке). Нет текущего значения → файл уходит в каноническую папку типа из mpc_download_paths. Новый эндпоинт files/locate (url→папка источника).
  • НОВОЕ: гибридная защита «тип ↔ папка» — в каноническую папку типа (images/videos/ audios из mpc_download_paths) нельзя загрузить файл другого типа.
  • ИЗМЕНЕНО: дедуп по содержимому убран; коллизии имён обрабатывает ядро MODX (при upload_check_exists=true — отказ «файл уже существует», без перезаписи).
  • ВНУТРЕННЕЕ: общее ядро MediaLibrary (списки расширений, accept, canonicalDir, sanitize/SVG/mime, контракт результата загрузки) — единый источник истины.
  • NB: нативный путь проверяет СИСТЕМНУЮ настройку upload_maxsize (дефолт 1 МБ) — на проектах без поднятого лимита крупные файлы отклонит ядро.

1.0.12-rc

  • НОВОЕ: у списков отдельная всегда-видимая кнопка-хэндл ☰ (правый верхний угол обёртки), открывающая редактор строк. Раньше, когда обёртка списка и её элементы одинаковой ширины, hover-пиктограммы налезали друг на друга и до «порядок/ добавить/удалить» было не докликаться (клик ловил самый глубокий элемент).
  • НОВОЕ: информер копий лексикона — элементы с data-mpc-copy вне секции получают бейдж 📋 и тултип «Это копия лексикона. Оригинал: …» (адрес из data-mpc-copy).
  • ИСПРАВЛЕНО: в панели «Скрытые поля» появлялось мнимое поле _origin = resource. Сайдбар добавлял служебный _origin прямо в общие объекты секций S.configData; теперь тегируется клон, а панель защитно игнорирует _-ключи.

1.0.11-rc

Инлайн-правка произвольных лексиконных ключей (data-mpc-lexicon).

  • НОВОЕ: элемент с маркером data-mpc-lexicon="topic:key" (вне секции) становится редактируемым — клик открывает инлайн-правку содержимого (текст/HTML; через data-mpc-ftype можно textarea/richtext). Сохранение через field/save с адресом type=lexicon (топик и ключ читаются из маркера). Требует mpc 2.5.43-rc+.
  • На элементе data-mpc-section маркер data-mpc-lexicon НЕ трактуется как произвольный ключ (это префикс лексикона секции) — фильтр по data-mpc-section.

1.0.10-rc

Правка скрытых/вырезанных полей секции и MIGX-списков из сайдбара.

  • НОВОЕ: панель полей секции (config-driven) — правит поля, вырезанные из вёрстки (data-mpc-remove) и вспомогательные, включая MIGX-СПИСКИ (строки + поля строк, любой вложенности). Доступна из сайдбара «Секции» (кнопка «✎ поля» у секции) и из панели «Скрытые поля» блока на странице. Редактор строк (add/delete/move + правка полей строки) работает по адресу/конфигу, без DOM-элемента списка; медиа/картинки/picture в строках открываются своими редакторами.
  • ИСПРАВЛЕНО: медиа/picture-редактор для записей ВНУТРИ строк списка открывался пустым — fieldConfigRecord не шёл по path к строке и не обрабатывал уже распарсенные вложенные массивы. Теперь подхватывает источники/постер/картинку.

1.0.9-rc

Положение панели редактора и её сворачивание.

  • НОВОЕ: системная настройка mpcve_toolbar_position — где закреплена панель (тулбар) редактора: top (вверху, по умолчанию) или bottom (внизу). При bottom отступ страницы и баннер блокировки переезжают соответственно. Значение прокидывается на фронт через window.mpcVEConfig (Mpcve::getClientConfig).
  • НОВОЕ: кнопка сворачивания панели — сворачивает тулбар в компактный хэндл в левом углу (остаётся только кнопка-разворот), не резервируя место под контент. Состояние запоминается в cookie mpcve_collapsed и переживает перезагрузку.

1.0.8-rc

Color-picker, контакты (иконки/класс), настройки, порядок секций, откат строк.

  • Логирование через mxLogger: новый класс MpcVEServices\Logger (на сервисе Mpcve). Прямые $this->modx->log(ERROR/WARN, ...) в хендлерах/коннекторе/плагине заменены на logger. mxLogger — единственный приёмник (стандартный журнал MODX не дублируется; лишь разовое «установите mxLogger», если он не установлен). Логирование включено из коробки: mpcve_debug=Да, mpcve_log_level=error. Тэги mpcvisualeditor + mpc + этап (page/contact/cache/changelog/connector/prerender).
  • Новый редактор color.js: пикер цвета + hex для полей config/TV (тип color/colorpicker). Значение хранится БЕЗ # (как админка MODX). FieldTypesHandler: color/colorpicker → редактор color.
  • Контакты (contact.js/ContactSaveHandler): image-иконка через file manager (поле icon); правка class-режим (иконка-классом) с фильтром служебных классов mpcve-*.
  • Настройки (info.js/SettingsListHandler): схлоп системной+контекстной записи в одну эффективную строку (target определяет, куда писать); виджет для image-xtype (file manager + превью); colorpicker без #; убран показ типа поля в модалке и панели.
  • Секции (sidebar.js): порядок по position (-1 вверху, своя position приоритетнее типовой), клик по имени → скролл к секции на странице с подсветкой, поиск секции в DOM по MIGX_formname.
  • Списки (rows.js): последняя строка очищается, а не удаляется (структура-образец сохраняется); inherit-диалог при добавлении строки в наследуемую секцию (api.js).
  • История (RowOpHandler/LogHandler/Mpcve): откат row-операций (add/delete/move) — восстановление поля-списка к снимку до операции.
  • CacheClearHandler: кнопка «Кэш» дополнительно чистит core/cache/system_settings/ (настройки/ClientConfig подхватываются без ручного сброса).

1.0.7-rc

Настройки: список из исходных шаблонов + тип виджета из БД; фикс дубля контакта.

  • Панель «Настройки» теперь из settings/list: сервер сканирует ИСХОДНЫЕ шаблоны (mpc_path_to_src) на data-mpc-info → видны ВСЕ настройки, включая удалённые из вёрстки (data-mpc-remove). Тип/значение — из БД (settingMeta).
  • Редактор настройки подбирает виджет по xtype из БД: combo-boolean → Да/Нет, colorpickerfield → color, code/textarea → textarea, иначе текст. Защищённые — с 🔒 без сохранения. И панель, и инлайн-клик берут тип из settings/list (кэш api.loadSettingsList/findSetting).
  • Фикс дубля контакта при смене значения (см. mpc 2.5.34 — ckey identity). Файлы: SettingsListHandler.php (new), Connector.php, editors/info.js (rewrite), settings.js (rewrite), api.js, overlay.css.

1.0.6-rc

Редактирование контактов (data-mpc-cfield) из редактора.

  • Правка полей контакта со страницы: value / caption / attributes. Клик по data-mpc-cfield → модалка-textarea с предупреждением «меняется на всех страницах». Запись через ContactSaveHandler (contact/save) → mpc Mpc::saveContact (грабер-логика: identity/лексиконы/мёрж в TV «Контакты»).
  • ТРЕБУЕТСЯ data-mpc-key: контакты без ключа не помечаются редактируемыми (identity по md5(value) нестабилен) — подсказка «добавьте ключ». Под правом mpcve_edit_global (как настройки).
  • Аудит в истории (action=contact, revertable=0). Файлы: ContactSaveHandler.php, Connector.php, editors/contact.js, mark.js, app.js, editors/index.js.

1.0.5-rc

Редактирование служебных настроек (data-mpc-info) из редактора.

  • Правка глобальных настроек сайта (системные/контекстные/ClientConfig) прямо со страницы: инлайн по видимому data-mpc-info + панель «⚙ Настройки» в тулбаре со списком ВСЕХ data-mpc-info страницы (включая — favicon/метрики, по которым нельзя кликнуть). Редактор — модалка-textarea с предупреждением «меняется на всех страницах».
  • Новое право mpcve_edit_global (PermissionChecker::canEditGlobal, прокинуто во фронт как editGlobal): без него настройки не помечаются редактируемыми и кнопка/панель скрыты. Регистрируется резолвером в политике Administrator.
  • Запись через InfoSaveHandler (action info/save) → mpc InformationUpdater::saveSetting (blacklist защищённых). Аудит в истории (revertable=0). Файлы: InfoSaveHandler.php, PermissionChecker.php, Mpcve.php, Connector.php, editors/info.js, settings.js, mark.js, app.js, constants.js, overlay.css, resolvers/1permissions.php.

1.0.4-rc

Санитайз вставки, откат медиа-правок, работа с секциями типа в сайдбаре.

  • Санитайз при вставке ВЕЗДЕ: инлайн-текст (text.js) и textarea вставляют только text/plain; RTE (rte.js) чистит буфер через sanitizeHtml (разрешённые теги/атрибуты остаются, style/on*/чужая разметка срезаются). Иначе вставка из IDE тащила стили в поле и в лексикон. + saveField прогоняет keepHtml-значение через sanitizeHtml перед отправкой.
  • Медиа-редакторы (image/picture/media) теперь шлют old в field/save → правки картинок/видео стали откатываемыми с диффом в истории (раньше — только аудит). file.js уже слал old.
  • Сайдбар «Секции»: объединённый список — свои секции + наследуемые из ТИПА под 🔒 (клик копирует секцию в текущий ресурс). Сверху массовые операции (только для не-типов): «Дополнить из типа» (merge), «Перезаписать из типа» (overwrite, с подтверждением), «Очистить» (с подтверждением). На странице-типе — только свои секции. Файлы: sidebar.js, overlay.css, Mpcve.php (copySectionFromType/copySectionsFromType/isTypeResource), ConfigGetHandler.php (отдаёт type+isType), SectionOpHandler.php (ops copy_one/from_type/clear).

1.0.3-rc

Фикс: смена картинки в простом image-TV ломала шаблон.

  • editors/image.js (isRecordImage): data-mpc-tv трактуется как путь-строка, а не migx-запись. Раньше редактор слал в простой image-TV массив [{MIGX_id,src,alt,title,width,height}], тот попадал в src="{$resource.tvs.}" и валил Fenom при запекании parsed/ («Unexpected token ':' near '{"MIGX_id":'»). migx-TV в редакторе пока не поддержаны (M29), так что любой data-mpc-tv — путь; запись-массив остаётся только для config-полей (data-mpc-field). В пару к серверному барьеру FieldWriter::writeTv (mpc 2.5.30).
  • docs/readme.txt переоформлен в едином стиле с mpc (allowed-tags разметка).

1.0.2-rc

Документация и порядок в системных настройках.

  • readme.txt переписан: что умеет / требования и зависимости / как пользоваться / системные настройки.
  • TODO.md (dev-роадмап) убран из файлов пакета.
  • Все 6 системных настроек получили название и описание (ru/en) — раньше показывались сырыми ключами без описаний. Сгруппированы по областям: «Основные» (mpcve_general) и «Редактор» (mpcve_editor), с русскими заголовками.

Более ранняя история — в docs/changelog.txt внутри пакета.

Последние обсуждения в сообществе MODX.pro