Skip to content
mFilter
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL
  1. Компоненты
  2. mFilter
  3. Разработка
  4. Модели и БД

Модели и база данных

Таблицы и модели mFilter.

Таблицы

ТаблицаМодельОписание
mfl_filter_setsMflFilterSetНаборы фильтров
mfl_filter_set_resourcesMflFilterSetResourceПривязки наборов к ресурсам
mfl_slugsMflSlugСлаги значений фильтров
mfl_patternsMflPatternПаттерны URL
mfl_seo_templatesMflSeoTemplateSEO шаблоны
mfl_word_formsMflWordFormСловоформы
mfl_page_configsMflPageConfigКонфигурации страниц
mfl_cacheMflCacheКэш результатов

MflFilterSet

Наборы фильтров.

Поля

ПолеТипОписание
idintID набора
namevarchar(255)Название
descriptiontextОписание
filtersjsonКонфигурация фильтров
settingsjsonДополнительные настройки
activetinyint(1)Активен
rankintПорядок сортировки
createdondatetimeДата создания
updatedondatetimeДата обновления

Структура filters

json
{
    "vendor": {
        "type": "vendors",
        "source": "ms3",
        "label": "Производитель",
        "enabled": true,
        "rank": 1
    },
    "color": {
        "type": "default",
        "source": "option",
        "field": "color",
        "label": "Цвет",
        "enabled": true,
        "rank": 2
    },
    "price": {
        "type": "number",
        "source": "field",
        "field": "Data.price",
        "label": "Цена",
        "enabled": true,
        "rank": 3
    }
}

Пример работы

php
// Получить набор
$filterSet = $modx->getObject(MflFilterSet::class, ['id' => 1]);

// Получить фильтры
$filters = $filterSet->get('filters');
if (is_string($filters)) {
    $filters = json_decode($filters, true);
}

// Создать набор
$filterSet = $modx->newObject(MflFilterSet::class);
$filterSet->fromArray([
    'name' => 'Каталог',
    'filters' => json_encode([...]),
    'active' => true
]);
$filterSet->save();

MflFilterSetResource

Привязки наборов фильтров к ресурсам.

Поля

ПолеТипОписание
idintID привязки
filter_set_idintID набора фильтров
resource_idintID ресурса
include_childrentinyint(1)Включить дочерние

Пример

php
// Привязать набор к ресурсу
$binding = $modx->newObject(MflFilterSetResource::class);
$binding->fromArray([
    'filter_set_id' => 1,
    'resource_id' => 5,
    'include_children' => true
]);
$binding->save();

// Найти набор для ресурса
$filterSetService = $mfilter->getFilterSetService();
$filterSet = $filterSetService->getForResource($resourceId);

MflSlug

Слаги (SEO-алиасы) значений фильтров.

Поля

ПолеТипОписание
idintID
keyvarchar(100)Ключ фильтра
valuevarchar(255)Оригинальное значение
slugvarchar(255)SEO-слаг
createdondatetimeДата создания

Пример

php
// Найти слаг
$slugObj = $modx->getObject(MflSlug::class, [
    'key' => 'vendor',
    'value' => 'Apple Inc.'
]);

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

// Создать слаг
$slugObj = $modx->newObject(MflSlug::class);
$slugObj->fromArray([
    'key' => 'color',
    'value' => 'Красный',
    'slug' => 'krasnyj'
]);
$slugObj->save();

MflPattern

Паттерны URL для распознавания фильтров.

Поля

ПолеТипОписание
idintID
patternvarchar(255)Регулярное выражение
filter_keyvarchar(100)Ключ фильтра
descriptiontextОписание
activetinyint(1)Активен
rankintПриоритет

Пример

php
// Паттерн для цены
$pattern = $modx->newObject(MflPattern::class);
$pattern->fromArray([
    'pattern' => 'price_(\d+)-(\d+)',
    'filter_key' => 'price',
    'description' => 'Диапазон цен',
    'active' => true
]);
$pattern->save();

MflSeoTemplate

SEO шаблоны для генерации метаданных.

Поля

ПолеТипОписание
idintID
namevarchar(255)Название
titletextШаблон title
h1textШаблон H1
descriptiontextШаблон description
texttextШаблон текста
conditionsjsonУсловия применения
activetinyint(1)Активен
rankintПриоритет

Структура conditions

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

Пример

php
$template = $modx->newObject(MflSeoTemplate::class);
$template->fromArray([
    'name' => 'Apple products',
    'title' => '{$filters.vendor} — купить в Москве | {$resource.pagetitle}',
    'h1' => '{$filters.vendor}',
    'description' => 'Купить {$filters.vendor} в интернет-магазине...',
    'conditions' => json_encode([
        'filters' => ['vendor' => ['apple']]
    ]),
    'active' => true
]);
$template->save();

MflWordForm

Словоформы для склонения.

Поля

ПолеТипОписание
idintID
wordvarchar(255)Слово (именительный падеж)
genitivevarchar(255)Родительный
dativevarchar(255)Дательный
accusativevarchar(255)Винительный
instrumentalvarchar(255)Творительный
prepositionalvarchar(255)Предложный
pluralvarchar(255)Множественное число

Пример

php
$wordForm = $modx->newObject(MflWordForm::class);
$wordForm->fromArray([
    'word' => 'телефон',
    'genitive' => 'телефона',
    'dative' => 'телефону',
    'accusative' => 'телефон',
    'instrumental' => 'телефоном',
    'prepositional' => 'телефоне',
    'plural' => 'телефоны'
]);
$wordForm->save();

MflPageConfig

Конфигурации страниц (legacy, для обратной совместимости).

Поля

ПолеТипОписание
idintID
resource_idintID ресурса
filtersjsonКонфигурация фильтров
settingsjsonНастройки
createdondatetimeДата создания
updatedondatetimeДата обновления

MflCache

Кэш результатов фильтрации.

Поля

ПолеТипОписание
idintID
cache_keyvarchar(64)Ключ кэша (MD5)
resource_idintID ресурса
datamediumtextЗакэшированные данные
expiresdatetimeВремя истечения
createdondatetimeДата создания

Миграции

При установке компонента автоматически создаются все таблицы.

Ручное создание таблиц

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

// Создать таблицу
$manager->createObjectContainer(MflFilterSet::class);
$manager->createObjectContainer(MflSlug::class);
// ...

// Добавить индекс
$manager->addIndex(MflSlug::class, 'key_slug');

Индексы

ТаблицаИндексПоля
mfl_slugskey_slugkey, slug
mfl_slugskey_valuekey, value
mfl_filter_set_resourcesresource_idresource_id
mfl_cachecache_keycache_key
mfl_cacheexpiresexpires