ms3RecentlyViewed - Недавно просмотренные товары для MiniShop3



Компонент для MiniShop3: вывод блока «Недавно просмотренные товары». Список хранится в браузере (localStorage или cookie) или в БД для авторизованных, заполняется автоматически при посещении страниц товаров.
Подробная документация: docs.modx.pro/components/ms3recentlyviewed

Возможности


  • Блок «Недавно просмотренные» — вывод по списку ID (AJAX через коннектор или серверный вызов сниппета)
  • Хранение в браузере — localStorage (по умолчанию) или cookie, без регистрации
  • Синхронизация в БД — для авторизованных: при входе данные из localStorage переносятся в БД
  • Автосинхронизация при входе — анонимные просмотры из localStorage автоматически переносятся в БД при первом заходе после авторизации
  • Месячное архивирование — настройка ms3recentlyviewed.archive_enabled (по умолчанию включено): агрегация в сводную таблицу, уменьшение размера основной таблицы
  • Исключение ботов — настройка ms3recentlyviewed.block_bots: просмотры от краулеров (Googlebot, Yandex и др.) не сохраняются в БД
  • Сниппет «Похожие на просмотренные» — товары из тех же категорий (ms3recentlyviewedSimilar)
  • Админка — дашборд (KPI, топ товаров), история просмотров с фильтрами, экспорт CSV
  • Локализация — MODX Lexicon (ru, en), на фронте — сниппет ms3rvLexiconScript
  • Кастомизация — Fenom-чанки, BEM-классы (префикс ms3rv), CSS-переменные






Системные требования


MODX 3.0+, MiniShop3, PHP 8.1+, Fenom (pdoTools) 3.x, VueTools (для админки)

После установки


Подключите лексикон, CSS и JS на сайте, передайте ID товара на странице товара и выведите блок «Недавно просмотренные».

Подробнее: Быстрый старт и Подключение на сайте.

В админке: Extras → ms3RecentlyViewedдашборд и история просмотров.

Компонент на модерации в modstore.pro. Буду рад обратной связи и постараюсь оперативно реагировать на баги и предложения.
Иван Бочкарев
18 февраля 2026, 21:18
modx.pro
180
+9
Поблагодарить автора Отправить деньги

Комментарии: 2

Наумов Алексей
19 февраля 2026, 07:51
+2
Привет! Дай распрошу)
как ботов отслеживаешь? Пару раз сталкивался, интересны подходы.
И вот что думаешь, большой каталог + большое кол-во пользователей не убьет таблицу просмотров в БД? Как ни крути именно просмотров может быть ну очень много, особенно если не всех ботов получится отсечь.
    Иван Бочкарев
    19 февраля 2026, 09:27
    +2
    Привет, Алексей.

    1. Как определяем ботов
    Проверка идёт по User-Agent в ms3rv_is_bot() (helpers.php). Используется regex по типичным маркерам краулеров:
    bot|crawl|slurp|spider|mediapartners|googlebot|bingbot|yandex|baiduspider|duckduckbot|teoma|ahrefs|semrush|mj12bot|dotbot|rogerbot|screaming|petalbot|bytespider
    Проверка выполняется до сохранения в БД — при block_bots=true (по умолчанию) запросы от таких User-Agent не пишутся. Это не идеально (подделка UA, новые боты), но отсекает большую часть краулеров.

    2. Большой каталог и много пользователей
    Есть несколько механизмов, чтобы таблица не росла бесконечно:

    Ограничение дублей. UNIQUE по (user_id, session_id, product_id) — для каждой пары «пользователь + товар» хранится одна строка. Повторный просмотр того же товара только обновляет viewed_at, новых строк не добавляется.
    TTL и автоочистка. По умолчанию ttl_days=90 и auto_cleanup_enabled=true. Плагин на OnWebPageInit раз в день удаляет записи старше 90 дней.
    Месячное архивирование. При archive_enabled=true (по умолчанию) данные за прошедший месяц агрегируются в ms3recentlyviewed_monthly (product_id, view_count, unique_users), а детальные строки из основной таблицы удаляются. Объём основной таблицы остаётся ограниченным.

    Итог: Рост таблицы ограничен числом уникальных пар «пользователь × товар» за последние 90 дней, а не количеством просмотров. Архив уменьшает объём основной таблицы, сохраняя агрегаты для аналитики.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2