Как загрузить?
Вступление
Визуальный фронт-редактор контента для сайтов на 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; нужен для рендера страниц).
Как пользоваться
- Дайте роли пользователей право (permission) mpcve_edit — оно проверяется при входе в режим правки. При сохранении дополнительно проверяется право save на конкретный ресурс (нельзя править чужое в обход).
- Откройте нужную страницу с query-параметром:
(имя параметра задаётся настройкой mpcve_edit_param, по умолчанию mpcedit).?mpcedit=1 - На странице появятся маркеры редактируемых блоков и тулбар. Кликаете блок — правите в открывшемся редакторе — изменение сохраняется сразу в хранилище 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