
Version 1.1.0: what's new
Major mFilter update with new snippets, SEO improvements, and architecture refactoring.
New snippets
mFilterCrumbs — breadcrumbs with filters
New snippet extends pdoCrumbs by adding filter segments to breadcrumbs.
{'!mFilterCrumbs' | snippet : ['schemaJsonLd' => true]}On page /catalog/color_red/size_xl/:
Home / Catalog / Red / XLFeatures:
- Schema.org Microdata by default
- Optional JSON-LD output
- Full pdoCrumbs parameter compatibility
- Auto labels for parent and vendor_id
mFilterSelected — selected filters
Shows active filters with option to remove them.
{'!mFilterSelected' | snippet}Features:
- Grouping by filter keys
- Auto labels from lexicons
- Reset-all-filters button
- AJAX integration for live updates
mFilterNav — SEO navigation
Generates navigation menus from filter values for internal linking.
{'!mFilterNav' | snippet : [
'filterKeys' => 'vendor_id',
'showCount' => true,
'element' => 'msProducts'
]}Use: SEO links in footer, brand/vendor navigation, tag cloud, text links instead of checkboxes.
mFilterSitemap — sitemap for filters
Generates XML sitemap for filter virtual pages.
{'!mFilterSitemap' | snippet : [
'priority' => '0.7',
'changefreq' => 'weekly'
]}Features:
- Auto detection of filter pages
- Combination limits to control size
- Result caching
- MODX Scheduler integration
SEO improvements
Canonical URL
Logic for building canonical URL on filtered pages is fixed. Canonical now correctly points to the base page or to the current filtered page depending on settings.
noindex settings
Refactored indexing control:
mfilter.seo_noindex— global noindex for filtersmfilter.seo_noindex_multiple— noindex when multiple values are selectedmfilter.seo_noindex_combinations— noindex for filter combinations
Human-readable labels
Filters parent and vendor_id now get resource names instead of IDs:
/catalog/parent_15/ → "Electronics" instead of "15"
/catalog/vendor_id_3/ → "Samsung" instead of "3"Schema.org markup
mFilterCrumbs includes full Schema.org markup:
- Microdata attributes in HTML
- Optional JSON-LD block
Config changes
Renamed system settings
All settings renamed from mfl_* to mfilter.*:
| Before | After |
|---|---|
mfl_url_separator | mfilter.url_separator |
mfl_values_separator | mfilter.values_separator |
mfl_seo_enabled | mfilter.seo_enabled |
| ... | ... |
Important: On upgrade, settings are migrated automatically.
URL separator in JavaScript
JavaScript now reads mfilter.url_separator from system settings instead of hardcoding:
// Before: always "_"
// Now: from setting (e.g. "--")Architecture changes
MflPageConfig removed
The legacy page config system is fully removed. Only FilterSetManager is used now.
What changed:
- Table
mfl_page_configsremoved - ConfigController API removed
- FilterConfig now proxies to FilterSetManager
Migration: On upgrade the table is dropped automatically. If you had MflPageConfig configs, recreate them via Filter sets.
PHPStan
PHPStan level 5 static analysis is enabled:
- Argument type checks
- Return type checks
- PHPDoc analysis
mFilterForm improvements
Auto resource detection
mFilterForm now auto-detects the current resource even on SEO URLs:
{* Before: resourceId had to be set on filtered pages *}
{'!mFilterForm' | snippet : ['resourceId' => 5]}
{* Now it works automatically *}
{'!mFilterForm' | snippet}Full MS3 options support
Filters now fully support MiniShop3 product options:
- Correct data source detection
- Correct value indexing
- option_key/option_value structure handled
TV Index
Improved normalization of TV values for filtering:
- Correct handling of multiple values
- Storage format normalization
- Indexing optimization
Fixes
- MySQL 8: Reserved word issues fixed
- xPDO: Pattern compatibility fixed
- Date filter: Correct date handling
- TV parsing: TV value parsing fixed
- Template output: tpl parameter initialization fixed
- Aliases: Alias and generator behavior fixed
- AJAX limit: Limit now correctly passed in URL
Updating
Before upgrading
- Back up the database
- Ensure you are not using the legacy MflPageConfig API
After upgrading
- Clear MODX cache
- Rebuild router cache: Manager → mFilter → Maintenance → Rebuild cache
- Check system settings (they are now
mfilter.*)
Breaking changes
- System settings renamed:
mfl_*→mfilter.* - Table
mfl_page_configsremoved - API
/api/mfilter/config/no longer exists
