
- MODX 3
- PHP 8.1
- miniShop3


mxQuickView.initialize — CSS/JS, window.mxqvConfig, режимы модалки native/bootstrap/fancybox.assets/components/mxquickview/js/mxqv.min.js — делегирование событий, AJAX к connector, отрисовка modal/selector, loop-навигация, хелперы ms3Variants.assets/components/mxquickview/connector.php — HTTP-точка входа для action render.core/components/mxquickview/src/Processors/Render.php — белый список, доступ к ресурсу, отрисовка chunk|snippet|template. Это обычный статический класс, а не MODX-процессор: пакет не регистрирует ни одного процессора и не добавляет пункт в меню «Компоненты», вызов идёт напрямую из коннектора.core/components/mxquickview/elements/chunks/mxqv_product.tpl — карточка quick view с формой корзины и блоком вариантов.data-mxqv-*.mxqv.js формирует POST в connector.php (mode, data_action, element, id, context, output, modal_library).action=render, затем вызывает Render::run(...).id, element, data_action;deleted=0), сверяет контекст и проверяет право просмотра;getChunk, runSnippet или $resource->process() (для template).{success, html|message}.native/bootstrap/fancybox) или в контейнер selector.Ресурс для отрисовки берётся из data-mxqv-id триггера: клиент не выбирает объект на сервере, он только передаёт ID. Дальше сервер ищет ресурс по id с deleted=0, при переданном context сверяет его с context_key ресурса, переключает контекст и проверяет право просмотра. Если ресурс не найден, приходит Resource not found, если права нет — Access denied.
Дополнительно MODX-поля id и resource выставляются в плейсхолдеры, поэтому чанк может использовать [[+id]] без явной передачи.
В отрисовку передаются:
$resource->toArray());content, assets_url;mxqv_content_html (копия content), mxqv_intro_html (обёртка introtext в <div class="qv-resource__intro">, если introtext не пуст). В чанке mxqv_resource по умолчанию не используются.msProduct загружен и для ID есть товар, поля msProductData сливаются поверх полей ресурса;has_variants, variants_html, variants_json. Варианты в список подставляет сниппет msProductVariants, JSON собирается по моделям ProductVariant / VariantOption с active=1, сортировкой по position. Для ресурса без товара MiniShop3 все три значения пустые: has_variants=false, variants_html='', variants_json='[]'.Состав плейсхолдеров чанков поставки mxqv_product и mxqv_resource — в разделе Плейсхолдеры чанков поставки.
Порядок обработки готового HTML:
parseFenom($html, $props), при неудаче getChunk('@INLINE ' . $html, $props), при неудаче сниппет pdoParser с tpl => '@INLINE ' . $html и fastMode => 0.try/catch. Без pdoTools (или если все шаги вернули пустую строку) остаётся исходный HTML, поэтому чанки на Fenom покажут сырые {$…}.processElementTags прогоняет по ответу MODX-теги [[*…]], [[+…]], [[~…]] с maxIterations = 10, чтобы теги из контента ресурса отработали внутри модалки.POST и только action=render.connector.php не проверяется: запрос принимается по одному лишь методу и значению action. Защита опирается на белые списки и на права на ресурс, см. Права доступа.id, deleted=0) и право просмотра (политика view или load, или permission view).chunk и snippet белый список обязателен.template белый список обязателен. Пустой mxquickview_allowed_template блокирует отрисовку шаблона.Своих таблиц БД для quick view нет: используются ресурсы MODX и (опционально) модели MiniShop3/ms3Variants.
| Файл | Роль |
|---|---|
assets/components/mxquickview/connector.php | Входная точка AJAX |
core/components/mxquickview/src/Processors/Render.php | Логика отрисовки, вызывается коннектором напрямую |
core/components/mxquickview/elements/snippets/mxqv_initialize.php | Подключение фронта и разметки модалки |
assets/components/mxquickview/js/mxqv.min.js | Поведение на клиенте (минифицирован) |
assets/components/mxquickview/css/mxqv.min.css | Стили модалки и карточки (минифицирован) |