Skip to content
  1. Extras
  2. mxQuickView
  3. For developers

API and interfaces

Snippet mxQuickView.initialize

Loads quick view CSS/JS and outputs the built-in modal HTML.

Parameters

ParameterDefaultDescription
modalSizefrom mxquickview_modal_sizeModal size: modal-sm, modal-lg, modal-xl
mouseoverDelayfrom mxquickview_mouseover_delayDelay before load on hover
modalLibrarynativeModal mode: native, bootstrap, fancybox (bootstrap5 supported as alias)
debug0Enable diagnostic logging to console ([mxqv])
loadingTextfrom lexicon mxqv_loadingLoading indicator text in modal/selector
fancyboxCssemptyURL/path to Fancybox CSS. If empty: bundled assets/components/mxquickview/vendor/fancybox/fancybox.css, else CDN
fancyboxJsemptyURL/path to Fancybox JS. If empty: bundled assets/components/mxquickview/vendor/fancybox/fancybox.umd.js, else CDN
bootstrapCssemptyURL/path to Bootstrap CSS for modalLibrary=bootstrap. If empty: bundled file, else CDN
bootstrapJsemptyURL/path to Bootstrap JS for modalLibrary=bootstrap. If empty: bundled file, else CDN

Trigger data attributes

AttributeDescription
data-mxqv-clickLoad on click
data-mxqv-mouseoverLoad on hover
data-mxqv-modeOutput mode: modal or selector (default modal)
data-mxqv-actionRender type: chunk, snippet, template (default chunk)
data-mxqv-elementChunk/snippet/template name or ID
data-mxqv-idResource ID
data-mxqv-titleModal title for mode=modal
data-mxqv-outputCSS selector for container when mode=selector
data-mxqv-contextContext key (for multi-language / multi-site)

Call examples

modx
[[!mxQuickView.initialize?
  &modalSize=`modal-xl`
  &mouseoverDelay=`350`
  &modalLibrary=`native`
  &debug=`1`
  &loadingText=`Loading...`
]]
fenom
{'!mxQuickView.initialize'|snippet:[
  'modalSize' => 'modal-xl',
  'mouseoverDelay' => 350,
  'modalLibrary' => 'native',
  'debug' => 1,
  'loadingText' => 'Loading...'
]}

What it adds to the page

  • <link ... mxqv.min.css?v=filemtime> (fallback to mxqv.css if min not found)
  • <script>window.mxqvConfig = ...</script>
  • <script src="...mxqv.min.js?v=filemtime" defer></script> (fallback to mxqv.js if min not found)
  • Native modal markup (#mxqv-modal-backdrop, #mxqv-modal)
  • For modalLibrary=bootstrap: container #mxqv-bootstrap-modal and Bootstrap from bootstrapCss/bootstrapJs or bundled files; if missing, Bootstrap CDN
  • For modalLibrary=fancybox: Fancybox from fancyboxCss/fancyboxJs or bundled files; if missing, CDN @fancyapps/ui

Native modal CSS variables

Variables apply to the built-in modal (modalLibrary = native) and are defined in:

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

Full list

VariableDefaultPurpose
--mxqv-backdrop-bgrgba(0, 0, 0, 0.5)Backdrop background
--mxqv-backdrop-z-index1050Backdrop z-index
--mxqv-backdrop-padding-mobile0Backdrop padding on mobile
--mxqv-backdrop-padding-tablet1remBackdrop padding on tablet/desktop
--mxqv-modal-bg#fffModal background
--mxqv-modal-radius-mobile0Modal radius on mobile
--mxqv-modal-radius-tablet0.25remModal radius on tablet/desktop
--mxqv-modal-shadow0 0.5rem 1rem rgba(0, 0, 0, 0.15)Modal shadow
--mxqv-modal-width-mobile100%Modal width on mobile
--mxqv-modal-width-tablet90vwModal width on tablet/desktop
--mxqv-modal-max-width-mobile100%Modal max-width on mobile
--mxqv-modal-max-width-tablet90vwModal max-width on tablet/desktop
--mxqv-modal-max-height-mobile100%Modal max-height on mobile
--mxqv-modal-max-height-tablet90vhModal max-height on tablet/desktop
--mxqv-modal-size-sm24remMax width for modal-sm
--mxqv-modal-size-lg50remMax width for modal-lg
--mxqv-modal-size-xl70remMax width for modal-xl
--mxqv-header-gap0.5remHeader element spacing
--mxqv-header-padding1rem 1.25remHeader padding
--mxqv-header-border-color#dee2e6Header border
--mxqv-title-font-size1.25remTitle font size
--mxqv-title-font-weight600Title font weight
--mxqv-actions-gap0.25remAction button spacing
--mxqv-btn-padding0.25rem 0.5remControl button padding
--mxqv-btn-radius0.25remControl button radius
--mxqv-btn-font-size1.25remControl button font size
--mxqv-close-font-size1.5remClose button font size
--mxqv-body-padding1.25remBody padding
--mxqv-btn-hover-bg#f0f0f0Header button hover background
--mxqv-loading-color#6c757dLoading indicator text color
--mxqv-loading-padding1rem 0Loading indicator padding

Override example

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);
}

Connector assets/components/mxquickview/connector.php

Endpoint

  • Method: POST
  • Request Content-Type: application/x-www-form-urlencoded
  • Response: JSON { success, html?, message? }

POST parameters

ParameterRequiredDescription
actionyesOnly render
data_actionnochunk, snippet, template (default chunk)
elementyesChunk/snippet/template name
idyesResource ID (integer > 0)
contextnoContext key; invalid value falls back to web
modenomodal or selector (used for snippet/template render)
outputnoCSS selector for target container (for mode=selector)
modal_librarynonative, bootstrap, fancybox (used for correct selector with cart snippets)

Success response

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

Error response

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

Errors and messages

Conditionmessage
Method not POSTInvalid request method
action != rendermxqv_invalid_action (lexicon)
index.php not foundindex.php not found
element empty or id <= 0Missing element or id
Resource not foundResource not found
No view permissionAccess denied
Chunk not in whitelistChunk not allowed
Chunk not foundChunk not found
Snippet not in whitelistSnippet not allowed
Snippet not foundSnippet not found
Template not in whitelistTemplate not allowed
Template not foundTemplate not found
Unsupported data_actionInvalid action

Note: error text is localized via lexicon mxquickview:default (keys mxqv_*).

JS API (via events)

The component does not export a separate API object but dispatches CustomEvent on document:

EventWhendetail
mxqv:openModal opened{ title }
mxqv:closeModal closed
mxqv:loadedContent inserted into modal{ content }

Request example

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();