Skip to content
  1. Extras
  2. msProductRemains
  3. Examples

Component usage examples ​

Output only products with stock ​

To output only products that have stock for at least one property combination, call the msProducts snippet like this:

modx
[[!msProducts?
  &leftJoin=`{
    "Remains": {
      "class": "msprRemains",
      "on": "msProduct.id = Remains.product_id AND Remains.remains > 0"
    }
  }`
  &groupby=`msProduct.id`
  &select=`{
    "msProduct": "*",
    "Remains": "SUM(Remains.remains) as remains"
  }`
  &where=`{
    "Remains.remains:>": "0"
  }`
]]
fenom
{'!msProducts' | snippet: [
  'leftJoin' => [
    'Remains' => [
      'class' => 'msprRemains',
      'on' => 'msProduct.id = Remains.product_id AND Remains.remains >= 0',
    ],
  ],
  'groupby' => 'msProduct.id',
  'select' => [
    'msProduct' => '*',
    'Remains' => 'SUM(Remains.remains) as remains',
  ],
  'where' => [
    'Remains.remains:>' => 0,
  ],
]}

The [[+remains]] placeholder will contain the total number of remaining units (same as getRemains snippet called without specifying properties).

Connecting remains when calling mFilter2 ​

To filter products by stock in the catalog, add these parameters to the mFilter2 call:

modx
&loadModels=`msProductRemains`
&leftJoin=`{
  "Remains": {
    "class": "msprRemains",
    "on": "msProduct.id = Remains.product_id AND Remains.remains >= 0"
  }
}`
&groupby=`msProduct.id`
&select=`{
  "msProduct": "*",
  "Remains": "SUM(Remains.remains) as remains"
}`
fenom
'loadModels' => 'msProductRemains',
'leftJoin' => [
  'Remains' => [
    'class' => 'msprRemains',
    'on' => 'msProduct.id = Remains.product_id AND Remains.remains >= 0',
  ],
],
'groupby' => 'msProduct.id',
'select' => [
  'msProduct' => '*',
  'Remains' => 'SUM(Remains.remains) as remains',
],

To add an "In stock" filter, also add these parameters to the mFilter2 call:

modx
&filters=`mspr|remains:availability`
&suggestionsRadio=`mspr|remains`
&tplFilter.row.mspr|value=`tpl.mFilter2.filter.checkbox`
fenom
'filters' => 'mspr|remains:availability',
'suggestionsRadio' => 'mspr|remains',
'tplFilter.row.mspr|value' => 'tpl.mFilter2.filter.checkbox',

And in the mse2_filters_handler_class setting of the mSearch2 component specify the filter handler class msprRemainsFilter.