Skip to content
mxQuickView
Быстрый просмотр карточки товара и любых ресурсов по AJAX для MODX 3
  1. Компоненты
  2. mxQuickView
  3. Для разработчика

API и интерфейсы

Сниппет mxQuickView.initialize

Подключает CSS/JS quick view и выводит HTML встроенной модалки.

Параметры

ПараметрПо умолчаниюОписание
modalSizeиз mxquickview_modal_sizeРазмер модалки: modal-sm, modal-lg, modal-xl
mouseoverDelayиз mxquickview_mouseover_delayЗадержка перед загрузкой по наведению
modalLibrarynativeРежим модалки: native, bootstrap, fancybox (bootstrap5 поддерживается как alias)
debug0Включить диагностическое логирование в консоль ([mxqv])
loadingTextиз лексикона mxqv_loadingТекст индикатора загрузки в modal/selector
fancyboxCssпустоURL/путь к CSS Fancybox. Если пусто, используется bundled-файл assets/components/mxquickview/vendor/fancybox/fancybox.css, при отсутствии — CDN
fancyboxJsпустоURL/путь к JS Fancybox. Если пусто, используется bundled-файл assets/components/mxquickview/vendor/fancybox/fancybox.umd.js, при отсутствии — CDN
bootstrapCssпустоURL/путь к CSS Bootstrap для modalLibrary=bootstrap. Если пусто, используется bundled-файл assets/components/mxquickview/vendor/bootstrap/bootstrap.min.css, при отсутствии — CDN
bootstrapJsпустоURL/путь к JS Bootstrap для modalLibrary=bootstrap. Если пусто, используется bundled-файл assets/components/mxquickview/vendor/bootstrap/bootstrap.min.js, при отсутствии — CDN

data-атрибуты триггера

АтрибутОписание
data-mxqv-clickТриггер загрузки по клику
data-mxqv-mouseoverТриггер загрузки по наведению
data-mxqv-modeРежим вывода: modal или selector (по умолчанию modal)
data-mxqv-actionТип рендера: chunk, snippet, template (по умолчанию chunk)
data-mxqv-elementИмя/ID элемента для рендера (чанк, сниппет, шаблон)
data-mxqv-idID ресурса
data-mxqv-titleЗаголовок модалки для mode=modal
data-mxqv-outputCSS selector контейнера для mode=selector
data-mxqv-contextКлюч контекста (для мультиязычности / мультисайта)

Примеры вызова

modx
[[!mxQuickView.initialize?
  &modalSize=`modal-xl`
  &mouseoverDelay=`350`
  &modalLibrary=`native`
  &debug=`1`
  &loadingText=`Загрузка...`
]]
fenom
{'!mxQuickView.initialize'|snippet:[
  'modalSize' => 'modal-xl',
  'mouseoverDelay' => 350,
  'modalLibrary' => 'native',
  'debug' => 1,
  'loadingText' => 'Загрузка...'
]}

Что добавляет на страницу

  • <link ... mxqv.min.css?v=filemtime> (если mxqv.min.css отсутствует, fallback на mxqv.css)
  • <script>window.mxqvConfig = ...</script>
  • <script src="...mxqv.min.js?v=filemtime" defer></script> (если mxqv.min.js отсутствует, fallback на mxqv.js)
  • разметку нативной модалки (#mxqv-modal-backdrop, #mxqv-modal)
  • при modalLibrary=bootstrap — bootstrap-контейнер #mxqv-bootstrap-modal и Bootstrap из bootstrapCss/bootstrapJs или bundled-файлы в assets/components/mxquickview/vendor/bootstrap/; если не найдено, используется CDN bootstrap
  • при modalLibrary=fancybox — Fancybox из fancyboxCss/fancyboxJs или bundled-файлы в assets/components/mxquickview/vendor/fancybox/; если не найдено, используется CDN @fancyapps/ui

CSS переменные нативной модалки

Переменные работают для встроенной модалки (modalLibrary = native) и объявлены в:

  • assets/components/mxquickview/css/mxqv.css

Полный список переменных

ПеременнаяПо умолчаниюНазначение
--mxqv-backdrop-bgrgba(0, 0, 0, 0.5)Фон backdrop
--mxqv-backdrop-z-index1050Z-index backdrop
--mxqv-backdrop-padding-mobile0Отступы backdrop на мобильных
--mxqv-backdrop-padding-tablet1remОтступы backdrop на tablet/desktop
--mxqv-modal-bg#fffЦвет фона модалки
--mxqv-modal-radius-mobile0Скругление модалки на мобильных
--mxqv-modal-radius-tablet0.25remСкругление модалки на tablet/desktop
--mxqv-modal-shadow0 0.5rem 1rem rgba(0, 0, 0, 0.15)Тень модалки
--mxqv-modal-width-mobile100%Рабочая ширина модалки на мобильных
--mxqv-modal-width-tablet90vwРабочая ширина модалки на tablet/desktop
--mxqv-modal-max-width-mobile100%Максимальная ширина модалки на мобильных
--mxqv-modal-max-width-tablet90vwМаксимальная ширина модалки на tablet/desktop
--mxqv-modal-max-height-mobile100%Максимальная высота модалки на мобильных
--mxqv-modal-max-height-tablet90vhМаксимальная высота модалки на tablet/desktop
--mxqv-modal-size-sm24remМаксимальная ширина размера modal-sm
--mxqv-modal-size-lg50remМаксимальная ширина размера modal-lg
--mxqv-modal-size-xl70remМаксимальная ширина размера modal-xl
--mxqv-header-gap0.5remРасстояние между элементами header
--mxqv-header-padding1rem 1.25remОтступы заголовка
--mxqv-header-border-color#dee2e6Граница заголовка
--mxqv-title-font-size1.25remРазмер шрифта заголовка
--mxqv-title-font-weight600Насыщенность заголовка
--mxqv-actions-gap0.25remРасстояние между кнопками действий
--mxqv-btn-padding0.25rem 0.5remОтступы кнопок управления
--mxqv-btn-radius0.25remСкругление кнопок управления
--mxqv-btn-font-size1.25remРазмер шрифта кнопок управления
--mxqv-close-font-size1.5remРазмер кнопки закрытия
--mxqv-body-padding1.25remОтступы body
--mxqv-btn-hover-bg#f0f0f0Hover-фон кнопок в header
--mxqv-loading-color#6c757dЦвет текста индикатора загрузки
--mxqv-loading-padding1rem 0Отступы индикатора загрузки

Пример переопределения

css
:root {
  --mxqv-modal-size-lg: 56rem;
  --mxqv-modal-size-xl: 76rem;
  --mxqv-modal-bg: #ffffff;
  --mxqv-header-border-color: #e9ecef;
  --mxqv-backdrop-bg: rgba(0, 0, 0, 0.6);
}

Коннектор assets/components/mxquickview/connector.php

Endpoint

  • Метод: POST
  • Content-Type запроса: application/x-www-form-urlencoded
  • Ответ: JSON { success, html?, message? }

Параметры POST

ПараметрОбязательныйОписание
actionдаТолько render
data_actionнетchunk, snippet, template (по умолчанию chunk)
elementдаИмя чанка/сниппета/шаблона
idдаID ресурса (целое > 0)
contextнетКлюч контекста; если невалиден, будет web
modeнетmodal или selector (служебно для snippet/template рендера)
outputнетCSS selector целевого контейнера (для mode=selector)
modal_libraryнетnative, bootstrap, fancybox (служебно для корректного selector у cart-сниппетов)

Успешный ответ

json
{
  "success": true,
  "html": "<div>...</div>"
}

Ответ с ошибкой

json
{
  "success": false,
  "message": "Chunk not allowed",
  "html": ""
}

Ошибки и сообщения

Условиеmessage
Метод не POSTInvalid request method
action != rendermxqv_invalid_action (лексикон)
Не найден index.phpindex.php not found
element пуст или id <= 0Missing element or id
Ресурс не найденResource not found
Нет права просмотраAccess denied
Чанк не в whitelistChunk not allowed
Чанк не найденChunk not found
Сниппет не в whitelistSnippet not allowed
Сниппет не найденSnippet not found
Шаблон не в whitelistTemplate not allowed
Шаблон не найденTemplate not found
Неподдерживаемый data_actionInvalid action

Примечание: текст ошибок локализуется через лексикон mxquickview:default (ключи mxqv_*).

JS API (через события)

Компонент не экспортирует отдельный объект API, но публикует события CustomEvent на document:

СобытиеКогдаdetail
mxqv:openмодалка открыта{ title }
mxqv:closeмодалка закрыта
mxqv:loadedконтент вставлен в модалку{ content }

Пример запроса

javascript
const response = await fetch('/assets/components/mxquickview/connector.php', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    action: 'render',
    data_action: 'chunk',
    element: 'mxqv_product',
    id: '7'
  })
});

const data = await response.json();