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



Компонент для MiniShop3: вывод блока «Недавно просмотренные товары».
Список хранится в браузере (localStorage или cookie) или в БД для авторизованных пользователей и автоматически заполняется при посещении страниц товаров.

Подробная документация: docs.modx.pro/components/ms3recentlyviewed

Возможности


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

Сниппеты


ms3recentlyviewed Выводит список недавно просмотренных товаров.

[[!ms3recentlyviewed?
    &tpl=`tpl.ms3rv.product`
    &limit=`8`
    &parents=`0`
    &toPlaceholder=`recentProducts`
]]
Основные параметры:
  • &tpl — чанк для вывода одной позиции
  • &limit — максимальное количество товаров
  • &parents — ограничение по категориям
  • &depth — глубина поиска по родителям
  • &toPlaceholder — сохранить вывод в плейсхолдер
  • &return — формат возврата (tpl / ids / data / json)
  • &showLog — вывод отладочной информации
Важно: рекомендуется вызывать некэшированно [[!ms3recentlyviewed]].

ms3recentlyviewedSimilar Выводит товары из тех же категорий, что и недавно просмотренные.

[[!ms3recentlyviewedSimilar?
    &tpl=`tpl.ms3rv.similar`
    &limit=`6`
]]
Поддерживает параметры фильтрации и форматирования аналогично основному сниппету.

ms3rvLexiconScript
Подключает фронтенд-лексикон для JavaScript.

[[!ms3rvLexiconScript]]

Определение ботов (crawler_detect / regex)


Компонент позволяет исключать просмотры от поисковых систем и краулеров.
Доступны два метода (выбираются в системных настройках):
  • crawler_detect — используется библиотека jaybizzle/crawler-detect для точного определения краулеров по User-Agent.
  • regex — встроенная проверка по регулярному выражению (/bot|crawl|slurp|spider|mediapartners|googlebot|bingbot|yandex|baiduspider|duckduckbot|teoma|ahrefs|semrush|mj12bot|dotbot|rogerbot|screaming|petalbot|bytespider/i).
Можно включить/отключить блокировку ботов.










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


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

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


  1. Подключите лексикон, CSS и JS на сайте
  2. Передайте ID товара на странице товара
  3. Добавьте вызов сниппета ms3recentlyviewed в нужное место шаблона
Подробнее: Быстрый старт и Подключение на сайте.

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

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

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

Наумов Алексей
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 дней, а не количеством просмотров. Архив уменьшает объём основной таблицы, сохраняя агрегаты для аналитики.
      Иван Бочкарев
      01 марта 2026, 14:45
      +1
      Добавил сиcтемную настройку ms3recentlyviewed.block_bots_detector и интегрировал jaybizzle/crawler-detect
      Андрей
      24 февраля 2026, 12:56
      0
      до сих пор на модерации?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5