Skip to content
mFilter
mFilter
Faceted filtering for MODX 3 with SEO URL support
  1. Extras
  2. mFilter
  3. Development
  4. Models and DB

Models and database

Tables and models of mFilter.

Tables

TableModelDescription
mfl_filter_setsMflFilterSetFilter sets
mfl_filter_set_resourcesMflFilterSetResourceFilter set to resource bindings
mfl_slugsMflSlugFilter value slugs
mfl_patternsMflPatternURL patterns
mfl_seo_templatesMflSeoTemplateSEO templates
mfl_word_formsMflWordFormWord forms
mfl_page_configsMflPageConfigPage configurations
mfl_cacheMflCacheResult cache

MflFilterSet

Filter sets.

Fields

FieldTypeDescription
idintSet ID
namevarchar(255)Name
descriptiontextDescription
filtersjsonFilter configuration
settingsjsonAdditional settings
activetinyint(1)Active
rankintSort order
createdondatetimeCreation date
updatedondatetimeUpdate date

filters structure

json
{
    "vendor": {
        "type": "vendors",
        "source": "ms3",
        "label": "Vendor",
        "enabled": true,
        "rank": 1
    },
    "color": {
        "type": "default",
        "source": "option",
        "field": "color",
        "label": "Color",
        "enabled": true,
        "rank": 2
    },
    "price": {
        "type": "number",
        "source": "field",
        "field": "Data.price",
        "label": "Price",
        "enabled": true,
        "rank": 3
    }
}

Example

php
// Get set
$filterSet = $modx->getObject(MflFilterSet::class, ['id' => 1]);

// Get filters
$filters = $filterSet->get('filters');
if (is_string($filters)) {
    $filters = json_decode($filters, true);
}

// Create set
$filterSet = $modx->newObject(MflFilterSet::class);
$filterSet->fromArray([
    'name' => 'Catalog',
    'filters' => json_encode([...]),
    'active' => true
]);
$filterSet->save();

MflFilterSetResource

Filter set to resource bindings.

Fields

FieldTypeDescription
idintBinding ID
filter_set_idintFilter set ID
resource_idintResource ID
include_childrentinyint(1)Include children

Example

php
// Bind set to resource
$binding = $modx->newObject(MflFilterSetResource::class);
$binding->fromArray([
    'filter_set_id' => 1,
    'resource_id' => 5,
    'include_children' => true
]);
$binding->save();

// Find set for resource
$filterSetService = $mfilter->getFilterSetService();
$filterSet = $filterSetService->getForResource($resourceId);

MflSlug

Slugs (SEO aliases) of filter values.

Fields

FieldTypeDescription
idintID
keyvarchar(100)Filter key
valuevarchar(255)Original value
slugvarchar(255)SEO slug
createdondatetimeCreation date

Example

php
// Find slug
$slugObj = $modx->getObject(MflSlug::class, [
    'key' => 'vendor',
    'value' => 'Apple Inc.'
]);

$slug = $slugObj->get('slug'); // 'apple-inc'

// Create slug
$slugObj = $modx->newObject(MflSlug::class);
$slugObj->fromArray([
    'key' => 'color',
    'value' => 'Red',
    'slug' => 'red'
]);
$slugObj->save();

MflPattern

URL patterns for recognizing filters.

Fields

FieldTypeDescription
idintID
patternvarchar(255)Regular expression
filter_keyvarchar(100)Filter key
descriptiontextDescription
activetinyint(1)Active
rankintPriority

Example

php
// Pattern for price
$pattern = $modx->newObject(MflPattern::class);
$pattern->fromArray([
    'pattern' => 'price_(\d+)-(\d+)',
    'filter_key' => 'price',
    'description' => 'Price range',
    'active' => true
]);
$pattern->save();

MflSeoTemplate

SEO templates for metadata generation.

Fields

FieldTypeDescription
idintID
namevarchar(255)Name
titletextTitle template
h1textH1 template
descriptiontextDescription template
texttextText template
conditionsjsonApplication conditions
activetinyint(1)Active
rankintPriority

conditions structure

json
{
    "filters": {
        "vendor": ["apple"],
        "color": ["*"]
    },
    "resources": [5, 10, 15]
}

Example

php
$template = $modx->newObject(MflSeoTemplate::class);
$template->fromArray([
    'name' => 'Apple products',
    'title' => '{$filters.vendor} — buy in Moscow | {$resource.pagetitle}',
    'h1' => '{$filters.vendor}',
    'description' => 'Buy {$filters.vendor} in online store...',
    'conditions' => json_encode([
        'filters' => ['vendor' => ['apple']]
    ]),
    'active' => true
]);
$template->save();

MflWordForm

Word forms for declension.

Fields

FieldTypeDescription
idintID
wordvarchar(255)Word (nominative)
genitivevarchar(255)Genitive
dativevarchar(255)Dative
accusativevarchar(255)Accusative
instrumentalvarchar(255)Instrumental
prepositionalvarchar(255)Prepositional
pluralvarchar(255)Plural

Example

php
$wordForm = $modx->newObject(MflWordForm::class);
$wordForm->fromArray([
    'word' => 'phone',
    'genitive' => 'phone',
    'dative' => 'phone',
    'accusative' => 'phone',
    'instrumental' => 'phone',
    'prepositional' => 'phone',
    'plural' => 'phones'
]);
$wordForm->save();

MflPageConfig

Page configurations (legacy, for backward compatibility).

Fields

FieldTypeDescription
idintID
resource_idintResource ID
filtersjsonFilter configuration
settingsjsonSettings
createdondatetimeCreation date
updatedondatetimeUpdate date

MflCache

Filtering result cache.

Fields

FieldTypeDescription
idintID
cache_keyvarchar(64)Cache key (MD5)
resource_idintResource ID
datamediumtextCached data
expiresdatetimeExpiration time
createdondatetimeCreation date

Migrations

All tables are created automatically when the component is installed.

Manual table creation

php
$manager = $modx->getManager();

// Create table
$manager->createObjectContainer(MflFilterSet::class);
$manager->createObjectContainer(MflSlug::class);
// ...

// Add index
$manager->addIndex(MflSlug::class, 'key_slug');

Indexes

TableIndexFields
mfl_slugskey_slugkey, slug
mfl_slugskey_valuekey, value
mfl_filter_set_resourcesresource_idresource_id
mfl_cachecache_keycache_key
mfl_cacheexpiresexpires