Skip to content
msBundles
Product bundles for miniShop3 with shared pricing, discounts, and cart sync
  1. Extras
  2. msBundles

Manager overview

Open Extras → msBundles from the menu or via manager/?a=index&namespace=msbundles. The UI runs on Vue 3 and PrimeVue through VueTools.

Bundle list

Step-by-step flows: Flows.

List screen

Top to bottom:

  1. Section title.
  2. Toolbar: name search, activity filter, counter, Add bundle.
  3. Table: DnD order, name with thumb, status, product count, actions.

List filter

ActionHow
Open editorClick the name
DuplicateCopy icon → inactive copy, editor opens
DeleteTrash icon → confirm
ReorderDrag the left handle

Filters: name search (debounced), activity (all / active / inactive). Empty list and “nothing found” show an empty state with a create CTA.

Create and edit

  1. Add bundle or click a name.
  2. Fill Name (required), description, image via the MODX media browser.
  3. Active toggle: with activeOnly=1 only active bundles appear on the storefront.
  4. Add products by search (name, SKU, or ID). One product once per bundle.
  5. Per line: quantity, price mode, Required flag.
  6. Reorder products with DnD in the composition table.
  7. Save. Without products, Save stays disabled.

Editor

The bundle shows on pages for every product in the set.

Price mode examples in the editor

Desk set — several modes on one bundle:

Editor: Desk set

Kitchen — fixed and optional lines:

Editor: Kitchen

Travel — percent / amount discount and optional:

Editor: Travel set

Price mode select on a line:

Line price modes

Right column

BlockShows
SummaryLine and unit counts
As on storefrontPrice, savings, stock for 1 bundle. “Preview only” badge

Storefront preview

Total and savings also appear in the dialog footer. A shortfall on required lines shows a warning above the form. Saving with stock issues asks for confirmation.

Line price modes

ModeValue fieldResult
OriginalignoredProduct price from miniShop3
FixedamountFixed unit price
Discount %0–100Percent off product price
Discount amountamountSubtracted from product price
Freeignored0 per unit

Bundle total = sum of lines × bundle count. Savings = difference vs original prices. Zero price on the storefront shows as “Free”.

Required and optional products

  • Required — without it the bundle is unavailable. Stock shortfalls follow msbundles_stock_behavior.
  • Optional — skipped on add when short. API response includes warnings.

Permissions

OperationPermission
Open section, list, viewmsbundles_view
Create, edit, delete, reorder, duplicatemsbundles_save

Cart behavior

The msBundles plugin listens to miniShop3:

  • msOnBeforeChangeInCart — changing one line qty syncs others with the same bundle_hash
  • msOnBeforeRemoveFromCart — removing one line removes the whole bundle
  • msOnGetCart — lead/member metadata for cart rows

Line quantity must be a multiple of the base quantity from bundle options.

On the storefront, load msBundles.initialize and call tplMsBundlesCartInfo in the cart chunk. Lead shows the badge and “Remove bundle”. Member qty is locked. After add/remove, msCart needs selector. Details: Frontend.