
Products grid
On the Products tab you filter the catalog, select rows, and launch operations.

Table
Default columns:
| Key | Field | Description |
|---|---|---|
| (fixed) | Preview | Product thumbnail (thumb → image → first MS3 gallery photo). Column is always left of data columns |
id | Resource ID | Number |
pagetitle | Title | Inline editing |
price | Price | Inline |
stock | Stock | MiniShop3 column stock. The stock operation names the same column count |
published | Published | Inline (toggle) |
variant_count | Variants | When ms3Variants is installed |
Layout and order are configured in columns. TVs and options (msbe:tv:*, msbe:option:*) show in cells. Scalar text TVs and scalar options support inline editing (see inline editing). Long text is truncated with a tooltip (title).
The preview cell uses fields.thumb. The list API fills it from thumb, then image, then the first MS3 gallery photo.
The table uses lazy pagination. Row order comes from products/list. Column-header sorting is not in the UI.
Pagination
- Default page size is 25 rows.
- The paginator changes pages. Page size is not configurable in the current UI.
- KPI Matching filter counts all products matching filters, not just the current page.
- Header checkbox selects current page only. Use expert mode for the full filtered set.
Category tree
A category tree sits to the left of the table. The “All products” node clears the parent filter. A click on a category applies parent / parentIds (respecting “Include subcategories” at the bottom of the sidebar and in the filter row).

The tree stays in sync with the Category dropdown in the filter panel.
Search and filters
Primary row: search, category (with subcategory toggle when a category is selected), publication status, Apply / Reset. Rare filters live under More filters: template, vendor, additional category, image, MS3 flags, deleted, duplicate URI. The button is highlighted when those filters are active.

| Element | API filterSpec | Action |
|---|---|---|
| Category | parent or parentIds | Filter by parent. “Include subcategories” expands to descendants |
| Additional category | additional_category or additionalCategoryIds | Products linked in ms3_product_categories. Subcategories optional |
| Template | template | MODX template ID |
| Vendor | vendor_id | MS3 vendor ID |
| Image | has_image | With / without row in ms3_product_files |
| Deleted | includeDeleted | Show products with deleted = 1 |
| Duplicate URI | duplicate_uri | Only products whose uri matches another msProduct (non-empty) |
| MS3 flag | new, popular, favorite | Flag in ms3_products: pick flag and Yes/No |
| Search | query | Substring in pagetitle or article |
| Publication status | published | All / published / hidden |
| Apply filters | Refreshes list and “Matching filter” count | |
| Reset | Restores default values |
Template, vendor, and category reference data load from filters/references.
Filters persist when you switch msBulkEditor tabs.
After the list loads, the field catalog updates from active template/parent filters or from the first product on the page.
Product selection
| Action | Result |
|---|---|
| Row checkbox | One ID in selectedIds |
| Header checkbox | All rows on the current page |
| “Selected: N” in stats bar | Count of checked IDs |
| Select only this row | Crosshair in the ⋯ column. See below |
Without selected rows and without expert mode, Run operation, Quick actions, and the Presets menu are disabled. Hint: msbulkeditor_select_products_first.
KPI and operation scope
A compact row sits above the table, in the same panel as filters and actions.
| Metric | Meaning |
|---|---|
| Matching filter | total: products matching current filters |
| Selected | Number of checked IDs |
Apply scope label next to them:
| State | Meaning |
|---|---|
| Rows selected | “Operation scope: N selected rows” |
| Expert mode | “all N products matching current filters” |
| No selection, expert off | msbulkeditor_selection_scope_none |
Expert mode
The Expert mode toggle changes selectionMode:
| Mode | Apply / export scope |
|---|---|
| Off | selectedIds only |
| On | all_filtered: all IDs matching filterSpec |
Limit: msbulkeditor_expert_limit (default 5000). Over the limit, preview/apply return msbulkeditor_expert_limit_exceeded. Narrow the filters.
An administrator can disable the mode: msbulkeditor_expert_mode = No.

Actions column (expert mode only)
With expert mode on, a right-hand column headed ⋯ appears:
- Click the crosshair (Select only this row).
selectedIdsbecomes[id]for that row.- Expert mode stays on. Further checkbox-based ops use
selectedIdsuntil you change selection.
Use this to shrink a mass selection to one product without turning expert off.
Toolbar
| Button / menu | Purpose |
|---|---|
| Run operation | OperationDialog |
| Quick actions | Preset operations (icon) → quick actions |
| Table settings | Columns (icon) → columns |
| Presets | Saved operations (icon) → presets |
While the page loads or filters change, a skeleton overlay covers the table.
Inline editing
Fields pagetitle, price, stock, published, article, weight, text/image TVs, and scalar options are editable by clicking a cell. See inline editing.
Column widths
Drag the right edge of a column header: width changes in the 40–480 px range and is saved in ui/state (when per-user UI persistence is enabled). The same columnWidths key is used in the Table settings dialog.
Empty and error states
| State | What you see |
|---|---|
| No products match filters | Empty state “No products found”. Change filters or clear search |
| Empty category tree | Sidebar hint |
| List load failure | Empty state error + reload. Key msbulkeditor_products_load_failed |
| Filter references failure | Sidebar message msbulkeditor_filter_references_failed |
| No selection | Operation toolbar disabled. Scope meta selection_scope_none |
| Expert limit | Toast / error msbulkeditor_expert_limit_exceeded on preview or apply |
