
mFilter
Faceted filtering for MODX 3 with SEO URL support


mFilter uses a multi-level caching system for performance.
Stored in table mfl_cache. Cached data:
Key format:
suggestions_{resourceId}_{filterHash}
filter_values_{resourceId}_{depth}Stored in core/cache/mfilter/filter_pages.cache.php.
Contains URI → resource ID mapping for fast detection of filter pages.
<?php
// mFilter filter pages cache
return [
'catalog/' => 5,
'catalog/phones/' => 12,
'catalog/tablets/' => 15,
];Held in memory during the request:
slugCache — value → slugvalueCache — slug → valuePreloaded when parsing the URL to minimize DB queries.
| Setting | Description | Default |
|---|---|---|
mfilter.cache_enabled | Enable caching | true |
mfilter.cache_lifetime | Filter cache lifetime (sec) | 3600 |
mfilter.cache_router_lifetime | Router cache lifetime (sec) | 86400 |
Maintenance → Clear cache
Clears:
mfl_cachefilter_pages.cache.php$mfilter = $modx->services->get('mfilter');
// Clear all cache
$mfilter->clearCache();
// Clear cache for a specific page
$mfilter->invalidatePageCache($resourceId);
// Rebuild router cache
$mfilter->rebuildRouterCache();$filter = $mfilter->getFilter();
// Clear cache for a resource
$filter->clearCache($resourceId);
// Clear all filter cache
$filter->clearCache(0);Cache is cleared automatically when:
| Event | What is cleared |
|---|---|
| Filter set saved | Cache for pages in that set |
| Filter set deleted | Cache for all pages |
| Set bindings changed | Router cache |
When updating products in bulk, clear the cache:
// After product import
$mfilter = $modx->services->get('mfilter');
$mfilter->clearCache();With Scheduler installed, a cache rebuild task is available.
$mfilter = $modx->services->get('mfilter');
$taskId = $mfilter->scheduleCacheRebuild();| Parameter | Description | Default |
|---|---|---|
clear_first | Clear cache before rebuild | true |
rebuild_router | Rebuild router cache | true |
rebuild_filters | Rebuild filter cache | true |
System settings → mfilter.cache_enabled → NoWith the profiler on (mfilter.debug_profiler) you will see in logs:
suggestions.cacheHit — cache hitsuggestions.cacheCheck — cache check timemFilter → Maintenance → System status
Shows:
// Row count in DB
$count = $modx->getCount('MFilter\\Model\\MflCache');
// Cache files
$cachePath = MODX_CORE_PATH . 'cache/mfilter/';
$files = glob($cachePath . '*');cache_lifetime to 7200–14400// Scheduler task
$mfilter->scheduleCacheRebuild();If products change frequently (prices, stock), lower TTL:
mfilter.cache_lifetime = 1800Increase TTL for maximum performance:
mfilter.cache_lifetime = 86400
mfilter.cache_router_lifetime = 604800| Column | Type | Description |
|---|---|---|
id | int | Primary key |
cache_key | varchar(255) | Unique cache key |
cache_value | mediumtext | Serialized data (JSON) |
created_at | datetime | Creation time |
expires_at | datetime | Expiration time |
Indexes:
uk_cache_key — unique index on keyidx_expires — index for purging expired rows