Skip to content
mFilter
mFilter
Faceted filtering for MODX 3 with SEO URL support
  • MODX 3
  • PHP 8.1
  • Vue 3
  1. Extras
  2. mFilter
  3. Development

Development ​

Documentation for extending and customizing mFilter.

Sections ​

SectionDescription
JavaScriptFrontend architecture, script loading
JS APIProgrammatic filter control
Headless APIREST API for SPA apps
ServicesPHP services and Dependency Injection
Filter typesCustom filter types
EventsPlugin and system events
Models and DBDatabase tables

Architecture ​

┌─────────────────────────────────────────────────────────┐
│                      Frontend                            │
├─────────────────┬───────────────────────────────────────┤
│   SSR mode      │           Headless mode               │
│  (FilterUI)     │    (ApiClient + FilterAPI)            │
├─────────────────┴───────────────────────────────────────┤
│                    Hooks System                          │
│            beforeApply → apply → afterApply             │
├─────────────────────────────────────────────────────────┤
│                    REST API Router                       │
├─────────────────────────────────────────────────────────┤
│                     Controllers                          │
│              FilterController, SlugController           │
├─────────────────────────────────────────────────────────┤
│                       Services                           │
│   Filter │ FilterSet │ SlugManager │ UrlRouter │ SEO   │
├─────────────────────────────────────────────────────────┤
│                      Handlers                            │
│        FilterTypes │ Sources │ FilterHandler            │
├─────────────────────────────────────────────────────────┤
│                       Models                             │
│   FilterSet │ Slug │ Pattern │ WordForm │ SeoTemplate   │
└─────────────────────────────────────────────────────────┘

Extension points ​

1. Frontend (JavaScript) ​

  • Hooks — intercept filter operations
  • Events — subscribe to UI events
  • Custom sliders — via MFilterSlider API

2. Backend (PHP) ​

  • Filter types — custom filter logic
  • Data sources — custom tables
  • MODX events — OnMFilterInit, OnHandleRequest
  • DI service override — via config

3. Templates ​

  • Chunks — custom filter templates
  • Fenom — full access to filter data

Quick examples ​

Programmatic filter control ​

javascript
const filter = mfilterGet('mfilter-form');
filter.setFilter('brand', ['apple', 'samsung']);
filter.submit();

Hook on filter apply ​

javascript
mfilterHooks.add('beforeApply', (ctx) => {
    console.log('Filters:', ctx.params.filters);
    // You can modify ctx.params
});

Register custom filter type ​

php
// In plugin on OnMFilterInit
$mfilter->getFilterTypeRegistry()->register('mytype', new MyFilterType($modx));

Override service via DI ​

php
// core/components/mfilter/config/services.php
return [
    'slugManager' => MyCustomSlugManager::class,
];