Skip to content
mFilter
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL
  1. Компоненты
  2. mFilter
  3. Интерфейс админки
  4. Scheduler-задачи

Scheduler-задачи

mFilter регистрирует семь задач в Scheduler при установке/обновлении. Большинство выполняется по расписанию автоматически — вмешательство админа не требуется. Несколько — on-demand, запускаются по нажатию кнопки в админке или вызываются программно.

Подсказка

Scheduler — опциональная зависимость. Без него mFilter работает, но отсутствуют:

  • Фоновая пересборка индекса фасетов (нужно нажимать «Пересобрать сейчас» и ждать)
  • Автопрогрев кэша baseIds
  • Ежедневная регенерация sitemap
  • Автоочистка mfl_request_ids

Полный список задач

ReferenceRecurringИнтервалНазначение
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 минут.

php
$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_suggestionstrueПрогревать также фасетные счётчики (legacy путь)
php
$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):

ПараметрПо умолчаниюОписание
filenamesitemap-filters.xmlИмя выходного файла (создаётся в корне сайта)
parents''Ограничение по родительским ресурсам
filterKeys''Список ключей фильтров
maxFilters1Максимум фильтров в одном URL
priority0.7Приоритет URL в sitemap
changefreqweeklyЧастота обновления
php
$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 минут.

Что делает:

  1. Считает строки старше TTL (по умолчанию 30 минут)
  2. Удаляет их пачкой
  3. Логирует количество удалённых строк, если > 0

В нормальной работе строки удаляются деструктором RequestIdsRegistry сразу по окончании запроса. Cron-задача срабатывает только если был kill -9, segfault или другой нештатный обрыв процесса.

Подсказка

Если задача регулярно удаляет много строк — это сигнал о нестабильности PHP-процесса. Проверьте логи MODX и системный journal.

mfl_reindex_slugs

Пересоздаёт SEO-алиасы (slugs) для всех значений фильтров.

Recurring: нет.

Когда запускается:

  • Вручную по кнопке «Переиндексация» в шапке админки
  • Через Scheduler-UI после изменения правил транслитерации

Что делает:

  1. Обходит все значения фильтров во всех активных FilterSet
  2. Для каждого создаёт slug, если его ещё нет
  3. Не удаляет существующие — только добавляет недостающие
php
$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: нет.

Когда запускается: вручную по кнопке на вкладке «Словоформы», когда пользователь добавляет новые слова или меняет правила склонения.

Что делает:

  1. Обходит таблицу mfl_word_forms, ищет слова без склонений
  2. Запрашивает morpher.ru API
  3. Сохраняет полученные формы

Внимание

Требует доступа к интернету и (опционально) API-ключа morpher.ru. Без ключа есть лимит на запросы.

Подробнее: Словоформы.

mfl_rebuild_cache

Очищает и заново строит кэш роутера и фильтров.

Recurring: нет.

Когда запускается:

  • Вручную после изменения паттернов URL или привязок наборов
  • Программно при изменении конфигурации

Параметры:

ПараметрПо умолчаниюОписание
clear_firsttrueОчистить кэш перед перестройкой
rebuild_routertrueПерестроить кэш роутера
rebuild_filterstrueПерестроить кэш фильтров
php
$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_warmupAJAX-режим без прогрева кэша → первый запрос дольше
mfl_generate_sitemapSitemap не обновляется автоматически
mfl_cleanup_request_idsStale-строки накапливаются; устраняется при следующем перезапуске PHP-FPM
ОстальныеЗапускаются вручную из кода или UI mFilter