
Scheduler-задачи
mFilter регистрирует семь задач в Scheduler при установке/обновлении. Большинство выполняется по расписанию автоматически — вмешательство админа не требуется. Несколько — on-demand, запускаются по нажатию кнопки в админке или вызываются программно.
Подсказка
Scheduler — опциональная зависимость. Без него mFilter работает, но отсутствуют:
- Фоновая пересборка индекса фасетов (нужно нажимать «Пересобрать сейчас» и ждать)
- Автопрогрев кэша baseIds
- Ежедневная регенерация sitemap
- Автоочистка
mfl_request_ids
Полный список задач
| Reference | Recurring | Интервал | Назначение |
|---|---|---|---|
mfl_rebuild_facet_index | нет | — | Полная пересборка индекса фасетов |
mfl_warmup | да | +50 минут | Прогрев baseIds для AJAX (legacy) |
mfl_generate_sitemap | да | +1 день | Генерация XML sitemap |
mfl_cleanup_request_ids | да | +10 минут | Очистка stale-строк mfl_request_ids |
mfl_reindex_slugs | нет | — | Пересоздание SEO-алиасов значений |
mfl_generate_word_forms | нет | — | Генерация словоформ для SEO |
mfl_rebuild_cache | нет | — | Перестройка кэша роутера и фильтров |
mfl_rebuild_facet_index
С версии 1.4.0. Полная пересборка таблиц mfl_facet_index_text и mfl_facet_index_num из источников (msProductData, msProductOption, modTemplateVarResource, modResource).
Recurring: нет.
Когда запускается:
- Автоматически в очередь Scheduler при upgrade пакета (бесшовная миграция)
- Вручную по кнопке «Через Scheduler» на вкладке Обслуживание
- Программно из любого кода
Когда нужно вручную:
- После массового импорта товаров
- После прямых SQL-правок в
msProductData/msProductOption - При расхождениях между фильтрами и реальными товарами
Длительность: на каталоге 30k — 5–10 секунд, на 200k — до 2 минут.
$scheduler = $modx->services->get('scheduler');
$task = $scheduler->getTask('mfilter', 'mfl_rebuild_facet_index');
$task->schedule('+0 seconds');Sanity rebuild
Можно включить recurring (например, еженедельно) через UI Scheduler как страховку от расхождений данных. По умолчанию не включён — обычно достаточно автоматических триггеров.
Подробнее: Обслуживание → Индекс фасетов.
mfl_warmup
Legacy с версии 1.4.0
С появлением индекса фасетов большая часть прогрева больше не нужна — значения и suggestion'ы теперь читаются из индекса. Задача оставлена для прогрева baseIds в AJAX-режиме. После стабилизации индекса будет упрощена или удалена.
Прогревает baseIds для всех активных конфигураций прогрева.
Recurring: да, +50 minutes (с запасом 10 минут до стандартного TTL кэша 3600 секунд).
Параметры:
| Параметр | По умолчанию | Описание |
|---|---|---|
warm_suggestions | true | Прогревать также фасетные счётчики (legacy путь) |
$warmupManager = $mfilter->getWarmupManager();
$runId = $warmupManager->schedule(true);Подробнее: Прогрев кэша.
mfl_generate_sitemap
Генерация XML-карты сайта с фильтрованными страницами.
Recurring: да, +1 day.
Когда запускается: ежесуточно (актуальный sitemap для поисковых ботов).
Что делает: обходит все активные FilterSet, генерирует URL для популярных комбинаций фильтров, сохраняет XML в файл (в отличие от сниппета, который отдаёт XML в HTTP-ответе).
Параметры задачи
Изменяются прямо в файле core/components/mfilter/elements/tasks/generateSitemap.php (раздел // DEFAULT PARAMETERS):
| Параметр | По умолчанию | Описание |
|---|---|---|
filename | sitemap-filters.xml | Имя выходного файла (создаётся в корне сайта) |
parents | '' | Ограничение по родительским ресурсам |
filterKeys | '' | Список ключей фильтров |
maxFilters | 1 | Максимум фильтров в одном URL |
priority | 0.7 | Приоритет URL в sitemap |
changefreq | weekly | Частота обновления |
$scheduler = $modx->services->get('scheduler');
$task = $scheduler->getTask('mfilter', 'mfl_generate_sitemap');
$task->schedule('+0 seconds');Подробнее про параметры самого сниппета: mFilterSitemap.
mfl_cleanup_request_ids
С версии 1.4.0. Удаляет старые строки из mfl_request_ids (см. RequestIdsRegistry) — это страховка на случай fatal-ошибок PHP, когда деструктор не успел отработать.
Recurring: да, +10 minutes.
Когда запускается: каждые 10 минут.
Что делает:
- Считает строки старше TTL (по умолчанию 30 минут)
- Удаляет их пачкой
- Логирует количество удалённых строк, если > 0
В нормальной работе строки удаляются деструктором RequestIdsRegistry сразу по окончании запроса. Cron-задача срабатывает только если был kill -9, segfault или другой нештатный обрыв процесса.
Подсказка
Если задача регулярно удаляет много строк — это сигнал о нестабильности PHP-процесса. Проверьте логи MODX и системный journal.
mfl_reindex_slugs
Пересоздаёт SEO-алиасы (slugs) для всех значений фильтров.
Recurring: нет.
Когда запускается:
- Вручную по кнопке «Переиндексация» в шапке админки
- Через Scheduler-UI после изменения правил транслитерации
Что делает:
- Обходит все значения фильтров во всех активных FilterSet
- Для каждого создаёт slug, если его ещё нет
- Не удаляет существующие — только добавляет недостающие
$scheduler = $modx->services->get('scheduler');
$task = $scheduler->getTask('mfilter', 'mfl_reindex_slugs');
$task->schedule('+0 seconds');mfl_generate_word_forms
Генерация словоформ для SEO-текстов через morpher.ru API.
Recurring: нет.
Когда запускается: вручную по кнопке на вкладке «Словоформы», когда пользователь добавляет новые слова или меняет правила склонения.
Что делает:
- Обходит таблицу
mfl_word_forms, ищет слова без склонений - Запрашивает morpher.ru API
- Сохраняет полученные формы
Внимание
Требует доступа к интернету и (опционально) API-ключа morpher.ru. Без ключа есть лимит на запросы.
Подробнее: Словоформы.
mfl_rebuild_cache
Очищает и заново строит кэш роутера и фильтров.
Recurring: нет.
Когда запускается:
- Вручную после изменения паттернов URL или привязок наборов
- Программно при изменении конфигурации
Параметры:
| Параметр | По умолчанию | Описание |
|---|---|---|
clear_first | true | Очистить кэш перед перестройкой |
rebuild_router | true | Перестроить кэш роутера |
rebuild_filters | true | Перестроить кэш фильтров |
$mfilter = $modx->services->get('mfilter');
$taskId = $mfilter->scheduleCacheRebuild();Подсказка
Не путать с индексом фасетов. Эта задача про MflCache (промежуточные результаты), индекс фасетов (mfl_facet_index_*) пересобирается отдельно через mfl_rebuild_facet_index.
Управление задачами
Просмотр задач
Если установлен Scheduler, перейдите в Установщик → Scheduler → Tasks, отфильтруйте по namespace mfilter.
Изменение интервалов
Можно изменить интервал recurring-задач через UI Scheduler:
| Поле | Формат | Пример |
|---|---|---|
interval | строка для strtotime() | +30 minutes, +2 hours, +1 day |
Внимание
Не используйте числовые значения для interval (например 1800). Scheduler передаёт это в strtotime(), который трактует число как год — 1800 станет 1800 годом, что переполнит INT(11) в колонке nextrun и зафиксирует таску на 2038-01-19. Только относительные строки.
Отключение задачи
Поставьте задачу на паузу через UI Scheduler. Удалять не рекомендуется — при upgrade пакета она будет перезарегистрирована.
Что произойдёт без Scheduler
| Задача | Поведение без Scheduler |
|---|---|
mfl_rebuild_facet_index | Сборка через UI кнопку «Пересобрать сейчас» (синхронно) |
mfl_warmup | AJAX-режим без прогрева кэша → первый запрос дольше |
mfl_generate_sitemap | Sitemap не обновляется автоматически |
mfl_cleanup_request_ids | Stale-строки накапливаются; устраняется при следующем перезапуске PHP-FPM |
| Остальные | Запускаются вручную из кода или UI mFilter |
