Skip to content
ms3ProductSets
ms3ProductSets
Dynamic product recommendations for MiniShop3. Manual links, auto rules, manager templates
  • MODX 3
  • PHP 8.1
  • miniShop3
  1. Extras
  2. ms3ProductSets
  3. For developers

API and interfaces ​

Snippet ms3ProductSets ​

Key parameters ​

ParameterDefaultDescription
typebuy_togetherSet type
resource_id / productIdcurrent resourceBase product ID
max_itemsms3productsets.max_itemsLimit (1..100)
category_id0Category for auto pick
set_id0VIP set number for type=vip. 0 or omitted uses 1 (ms3productsets.vip_set_1).
tpltplSetItemCard chunk (tplSetVIP / tplPopcorn use itemTpl for the row)
itemTpl''Row chunk when tpl is a VIP/popcorn wrapper
set_title / discount_percent''Placeholders for the VIP wrapper
showLogfalsePassed to msProducts
emptyTpltplSetEmptyEmpty result chunk
hideIfEmptytruetrue: empty string. false: emptyTpl.
exclude_ids''Excluded IDs
tplWrapper''Wrapper with placeholders output, type, count
sortby / sortdir'' / ASCIf sortby is empty, set order is preserved
showUnpublishedfalsePassed to msProducts
showHiddenfalsePassed to msProducts
includeTVs, includeThumbs, tvPrefix''Passed to msProducts
returndatadata, ids, json
toPlaceholder''Write output to placeholder

Supported type values ​

auto, vip, cross-sell, popcorn, also-bought, buy_together, similar, cart_suggestion, auto_sales, custom.

Per-type logic: Set types.

Call examples ​

fenom
{'ms3ProductSets' | snippet : [
  'type' => 'similar',
  'resource_id' => $_modx->resource.id,
  'max_items' => 6,
  'tpl' => 'tplSetItem'
]}
modx
[[!ms3ProductSets?
  &type=`similar`
  &resource_id=`[[*id]]`
  &max_items=`6`
  &tpl=`tplSetItem`
]]

Snippet mspsLexiconScript ​

Outputs:

  • window.mspsLexicon (keys for frontend messages)
  • window.mspsConfig (maxItems, lang, toastTimeout: 4000, toastPosition: 'topRight')

Load before productsets.js.

Fenom: {'mspsLexiconScript' | snippet}MODX: [[!mspsLexiconScript]]

Connector assets/components/ms3productsets/connector.php ​

Front (web) ​

actionMethodParametersResponse
get_setPOSTtype, resource_id (alias product_id), category_id, set_id, max_items, tpl, tplWrapper, emptyTpl, hideIfEmptyHTML
add_to_cartPOSTproduct_id, countJSON {success, added, message}

Sample add_to_cart responses (connector fallback path):

json
{"success": true, "added": 1, "message": ""}
json
{"success": false, "added": 0, "message": "Product not found"}

Manager (mgr, auth required) ​

actionPurposeMain parameters
get_templatesList set templates—
save_templateCreate/update templateid, name, type, related_product_ids, description, sortorder
delete_templateDelete template and its template_name+type linksid
apply_templateApply template to categories/productstemplate_id, parent_id or parent_ids[], replace, optional product_ids
unbind_templateUnbind template from categorytemplate_id, parent_id or parent_ids[]
get_resource_treeCategory tree (no products)parent_id, context_key
get_resourcesProduct list for pickerparent_id, template_id, query, limit, ids[]

JS API (window.ms3ProductSets) ​

MethodPurpose
render(selector, options)Render set via get_set. JS default type is auto. Snippet default is buy_together.
addToCart(productId, count)MiniShop3 Web API first. Connector add_to_cart is fallback.
addAllToCart(buttonOrContainer)Collects data-msps-product-ids, then cards, then input[name="id"]
toast(message)Show frontend toast

Events after successful add:

  • addToCart: msps:cart:update with detail: { product_id, count }. MiniShop3 API path also fires ms3:cart:updated.
  • addAllToCart: msps:cart:update with detail: { product_ids }

Plugins ​

PluginEventPurpose
ms3ProductSets SyncTV (file ms3productsets_sync_tv)OnDocFormSaveSync set TVs into ms3_product_sets
ms3ProductSets Cleanup (file ms3productsets_on_resource_delete)OnResourceDeleteClean links for deleted resource