Skip to content
Stone & Water
Doc · 02 Product listing

Product listing · Filters, columns, inline edit, Quickview

The central listing shows your entire product catalogue - with configurable columns, powerful filters, inline editing and a Quickview modal for quick master-data maintenance.

View structure

  • Filter bar at the top - unlimited filter conditions with AND/OR
  • Column headers - sortable, resizable, hide/show
  • Data rows - one per product, variants inline-expandable
  • Footer toolbar - selection, bulk actions, export/import
  • Bottom save bar - appears on active inline changes

Filters with AND / OR

Combine any number of filter conditions. Per condition: pick field, operator and value.

9 comparison modes

  • Text: contains, does not contain, starts with, ends with, equals, not equal, empty, not empty
  • Number: equal, not equal, greater, less, greater/equal, less/equal, empty, not empty
  • Multi: in list (pipe-separated)

AND / OR linking

  • Stock < 5 AND category "Sale"
  • Stock < 5 AND (manufacturer = "Nike" OR manufacturer = "Adidas")
  • Active = yes AND cover image = empty

Variant-aware

Filters automatically traverse parent and child fields. Filter by "colour = red" and parents with matching variants are also matched.

Configure columns

  • Add: plus icon top right - all fields searchable
  • Order: drag-and-drop the column header
  • Width: drag at column edge
  • Sort: click the column header

Custom columns

The "Custom column" button (top right in the column configuration) lets you add a column with its own name and source field - a master data field (release date, stock, dimensions, date fields, …) or any custom field. The source selector is a searchable dropdown with groups (master data / custom fields). Optionally markable as sortable (sorting via the field's DAL path by clicking the column header). Values are formatted automatically (localised date, yes/no for boolean). New columns can be ordered, removed and are stored persistently.

Filter and column presets

  • Personal presets - only your user
  • Shared presets - other users with same role
  • System presets - admin-set, read-only

Inline editing

Editable directly in the listing row - also for variants:

  • Stock, price (gross, with auto net calculation)
  • EAN, manufacturer number
  • Weight
  • Active status - toggle slider

Changes are buffered locally. Click Save in the bottom save bar to commit. Shortcuts: Enter, Esc, Tab.

Read-back verification: After save the stored value is verified. If Shopware discards the value, a warning appears instead of falsely reporting success.

Quickview modal

Per row, the Quickview icon opens a compact modal with the most important master data - no switch to the full detail view. Ideal for serial maintenance.

Modal sections

  • Master data: SKU, name, EAN, MPN, active status
  • Prices: gross/net, purchase price, omnibus price
  • Stock & shipping: stock, restock time, closeout, free shipping
  • Order quantities: min/max/step
  • Description as textarea
  • SEO: meta title, meta description, keywords

Visibility per section is controlled in the config matrix under "Quickview". Sections without active fields are hidden automatically.

Variant display

Variant products appear as a parent row with a variant count badge. Click the plus icon to expand variants inline - lazy-loading: variants load only when expanded.

Category filter

Besides the freely combinable conditions there is a dedicated filter based on the category tree. It renders the catalogue at any depth - five, six or more levels can be expanded and selected.

Ticking a category selects everything below it as well, and clearing it removes them again. That is the part that matters in practice, because products usually sit on the lowest level - selecting the parent category alone would have found nothing.

Note: up to version 1.10.22 the tree stopped after four levels and every subcategory had to be clicked individually. Both are fixed as of 1.10.23.

How the filters interact

All filters work together and narrow the result set - sales channel, categories, completeness, custom conditions, product groups, price range, images, description, visibility, properties and delivery time.

When a custom filter is set, the plugin additionally searches the variants and pulls their parent products into the list, so a match is not missed when only one variant fits. The selected sales channel is taken into account there as well.

Negating conditions such as "does not contain" or "is not" deliberately apply to the parent product only. Otherwise a single matching variant would be enough to pull in an article that actually contradicts the filter.

For diagnosis: after the list has loaded, the query actually sent is available in the browser console under window.stawPimLastCriteria. With several filters set at once, this shows which conditions really arrive.

Image filters: main product or variants

There are two separate filters for cover images. "Cover image (main product)" checks the image of the parent product, "Cover image (variants)" checks whether the variants have their own image.

The second filter finds parent products with at least one variant lacking its own cover image; the affected variants appear below. Product listing, saved presets and CSV export return the same result.

Note: up to version 1.10.27 the filters were named "Cover image" and "Variant cover" and returned nothing for the variant case. Both are fixed.

Performance for large catalogues

For 1000+ products the browser only renders visible rows via content-visibility: auto. Smoother scrolling without visible UI change. Plus:

  • Row count: 10 / 25 / 50 / 100 / 200 / 500
  • Sticky pagination above and below
  • Quick-scroll-to-top button
  • Variants load leaner: When expanding, only the fields the list actually shows are loaded, along with preview image and variant options. Custom columns are still taken into account.
  • Completeness comes from the server - following the same rule as the completeness filter. Description and meta texts of every variant no longer need to be loaded.
  • Load timings: After loading, the times per phase are available in the browser console under window.stawPimLastLoadTimings.

Checking translations - filter and completeness

  • Filter "translation missing" with the variants name missing, description missing and both missing. Hits are resolved server-side against exactly the selected language and limited to master products; empty texts count as missing. Without an explicit language selection the active language applies.
  • The filter chip names the language - for example "Translation: name missing (Alpendampf DE)". That makes clear at a glance what the result refers to.
  • Language inheritance is taken into account: If a text only exists on the parent language it still applies in the storefront - filter and completeness therefore check the whole language chain. Products without any translation in the chain are still found reliably.
  • Completeness follows the sales channel: Translatable fields are calculated against the language of the selected channel; without a channel selection against the system language.
  • RRP status ("RRP missing", "RRP lower than gross") is resolved server-side across the entire catalogue, so hit count, paging and result match.

What's next

Continue with Bulk-edit, the core of the plugin - maintain many products in one step.