Skip to content
mFilter
mFilter
Faceted filtering for MODX 3 with SEO URL support
  1. Extras
  2. mFilter

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.

fenom
{'!mFilterCrumbs' | snippet : ['schemaJsonLd' => true]}

On page /catalog/color_red/size_xl/:

Home / Catalog / Red / XL

Features:

  • Schema.org Microdata by default
  • Optional JSON-LD output
  • Full pdoCrumbs parameter compatibility
  • Auto labels for parent and vendor_id

Details →


mFilterSelected — selected filters

Shows active filters with option to remove them.

fenom
{'!mFilterSelected' | snippet}

Features:

  • Grouping by filter keys
  • Auto labels from lexicons
  • Reset-all-filters button
  • AJAX integration for live updates

Details →


mFilterNav — SEO navigation

Generates navigation menus from filter values for internal linking.

fenom
{'!mFilterNav' | snippet : [
    'filterKeys' => 'vendor_id',
    'showCount' => true,
    'element' => 'msProducts'
]}

Use: SEO links in footer, brand/vendor navigation, tag cloud, text links instead of checkboxes.

Details →


mFilterSitemap — sitemap for filters

Generates XML sitemap for filter virtual pages.

fenom
{'!mFilterSitemap' | snippet : [
    'priority' => '0.7',
    'changefreq' => 'weekly'
]}

Features:

  • Auto detection of filter pages
  • Combination limits to control size
  • Result caching
  • MODX Scheduler integration

Details →


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 filters
  • mfilter.seo_noindex_multiple — noindex when multiple values are selected
  • mfilter.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.*:

BeforeAfter
mfl_url_separatormfilter.url_separator
mfl_values_separatormfilter.values_separator
mfl_seo_enabledmfilter.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:

javascript
// 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_configs removed
  • 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:

fenom
{* 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

  1. Back up the database
  2. Ensure you are not using the legacy MflPageConfig API

After upgrading

  1. Clear MODX cache
  2. Rebuild router cache: Manager → mFilter → Maintenance → Rebuild cache
  3. Check system settings (they are now mfilter.*)

Breaking changes

  • System settings renamed: mfl_*mfilter.*
  • Table mfl_page_configs removed
  • API /api/mfilter/config/ no longer exists