
mFilter
Faceted filtering for MODX 3 with SEO URL support


mFilter provides two main snippets for filtering.
| Snippet | Purpose |
|---|---|
| mFilter | Output filtered results |
| mFilterForm | Render the filter form |
{* Filter form in sidebar *}
<aside>
{'!mFilterForm' | snippet}
</aside>
{* Filter results *}
<main>
{'!mFilter' | snippet: [
'element' => 'msProducts',
'paginator' => 'pdoPage',
'parents' => $_modx->resource.id,
'limit' => 24
]}
{$_modx->getPlaceholder('page.nav')}
</main>Delegates data fetching and rendering to external snippets:
{'!mFilter' | snippet: [
'element' => 'msProducts', {* Data snippet *}
'paginator' => 'pdoPage', {* Pagination snippet *}
'parents' => 5,
'limit' => 24,
'tpl' => 'mfilter.row'
]}How it works:
element with returnIds=1paginatorpaginator calls element for renderingmFilter runs queries and rendering itself (no external snippets):
{'!mFilter' | snippet: [
'parents' => 5,
'limit' => 24,
'tpl' => 'product.row',
'class' => 'msProduct'
]}Use when you need full control over the query.
Both snippets support AJAX updates without page reload.
Enabled by default. The form is submitted via JavaScript; results update dynamically.
{'!mFilterForm' | snippet: ['ajax' => 0]}
{'!mFilter' | snippet: ['ajax' => 0]}| Mode | Description |
|---|---|
form | Submit on button click |
instant | Submit when any filter changes |
{'!mFilterForm' | snippet: ['ajaxMode' => 'instant']}