new

ms3RecentlyViewed

Недавно просмотренные товары для MiniShop3
Автор дополнения
Иван Бочкарев
Пакетов
31
Закачек
187
Обычно отвечает в течение суток
Автор дополнения
Пакетов
31
Закачек
187
Обычно отвечает в течение суток
Версия 1.2.14-pl
Дата выпуска 02.09.2026
Загрузки 14
Просмотры 639
Внимание, этот компонент требует PHP 8.1 или выше!
Внимание, этот компонент требует MODX 3 или выше.

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


Компонент для отображения блока «Недавно просмотренные» в интернет-магазине на MODX Revolution 3 и MiniShop3. Показ товаров, которые пользователь уже просматривал, увеличивает вовлечённость, время на сайте и конверсию.


Возможности


  • Блок «Недавно просмотренные» — вывод по списку 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+, Fenom (pdoTools) 3.x, VueTools (для админки)



📈 Почему выбирают


Блок «Просмотренные ранее» стимулирует повторный интерес, увеличивает глубину просмотра и конверсию. Один сниппет для списка, один — для похожих, коннектор для AJAX. Подробная документация — в пакете.

Changelog

Format: Keep a Changelog

[1.2.14] - 2026-09-02

Fixed

  • Когда в cookie попадали удалённые или несуществующие ID, блок иногда показывал 1 товар или пусто при limit=4. ms3recentlyviewed теперь рендерит из расширенного списка (max(limit, max_items)) и добирает валидные товары до лимита.
  • Проверка полноты вывода учитывает только допустимые data-product-id и нужное количество карточек, поэтому «чужой» каталожный HTML не считается успешным результатом.

[1.2.13] - 2026-08-31

Added

  • Параметр includeThumbs у ms3recentlyviewed (по умолчанию thumb,small). Передаётся в msProducts. Пример: &includeThumbs=`large`. В своём чанке используйте {$large} / {$medium} и т.д. Для AJAX-гидратации значение уходит в data-ms3rv-include-thumbs.

Fixed

  • Кросс-категорийный viewed: если после каталожного msProducts приходят «чужие» карточки текущей категории (липкий pdoFetch), результат больше не принимается по числу карточек. Сверяются data-product-id с запрошенными ID; иначе — direct SQL.

[1.2.12] - 2026-08-31

Fixed

  • На страницах категорий «Недавно просмотренные» показывало только товары из текущей категории. После каталожного msProducts pdoFetch сохранял parents и резал список по дереву категории.
  • Рендер viewed вынесен в ms3rv_viewed_render_by_ids(): сброс pdoFetch перед msProducts, цепочка whereresources (parents=0, depth=10), при неполном HTML — direct SQL.

[1.2.11] - 2026-08-28

Fixed

  • &limit сниппета и свойство limit в админке снова работают: значение попадает в JS как data-ms3rv-limit, ID обрезаются до limit до msProducts. Пустой limit берёт max_items.
  • На карточке товара текущий id всегда вычитался из списка: при max_items=4 на экране было 3. Сейчас текущий товар убирается только если без него limit всё ещё набирается.

[1.2.10] - 2026-08-27

Added

  • Параметр tplOuter у ms3recentlyviewed и ms3recentlyviewedSimilar: чанк-обёртка списка с [[+output]], плюс плейсхолдеры hydrate, tpl, emptyTpl. В пакете есть образец tplViewedOuter с ms3rv__list. Пустой tplOuter готовый список не оборачивает.
  • viewed.js читает data-ms3rv-tpl и data-ms3rv-empty-tpl с контейнера гидратации, поэтому &tpl сниппета не теряется при AJAX.

Fixed

  • При пустых ids (гость + localStorage) JS подставлял дефолтный tplViewedItem и игнорировал &tpl сниппета. Имена чанков теперь передаются в обёртку data-ms3rv-hydrate.
  • Класс row на .ms3rv__list добавляется только для дефолтных чанков карточки, чтобы не ломать свою вёрстку.

[1.2.9] - 2026-08-26

Fixed

  • При пустых ids (гость + localStorage) emptyTpl оборачивается в data-ms3rv-hydrate="viewed". JS подставляет список из браузера вместо постоянного «Вы ещё ничего не смотрели».

[1.2.8] - 2026-08-21

Fixed

  • Fenom больше не падает на {" в ms3rvLexiconScript: после каждого { ставится пробел. { не открывает тег Fenom, JSON и JS остаются валидными.

[1.2.7] - 2026-08-21

Fixed

  • В viewed.js, если в списке только текущий товар, он остаётся в блоке. Раньше исключался, и страница товара всегда была пустой.

[1.2.6] - 2026-04-22

Added

  • Плагин ms3recentlyviewedViewedIdsPlaceholder на OnWebPageInit: плейсхолдер viewedIds из cookie ms3_recently_viewed, когда ms3recentlyviewed.storage_type = cookie. Можно выводить сниппеты на сервере без своей $viewedIds в Fenom.
  • Хелпер ms3rv_get_viewed_ids_cookie_string() в helpers.php.

Changed

  • Документация: сценарии JS / fromDB / cookie+плейсхолдер, примеры Fenom с $_modx->getPlaceholder('viewedIds'), зарезервированное имя плейсхолдера viewedIds.

Fixed

  • ms3rv_get_viewed_ids_cookie_string: парсинг cookie без лишнего rawurldecode (PHP уже декодирует $_COOKIE). Один fallback rawurldecode, если в строке есть % и первый разбор дал пусто.
  • Плагин ms3recentlyviewedViewedIdsPlaceholder: priority -5 на OnWebPageInit, раньше соседних плагинов с priority 0.

[1.2.5] - 2026-03-02

Fixed

  • ms3recentlyviewedSimilar: зафиксирована цепочка вывода whereresourcesms3recentlyviewed(ids)direct(sql+chunk).
  • Лексиконы корзины: при рендере через connector/direct загружается minishop3:cart, ключи вроде ms3_cart_add больше не выводятся текстом.
  • Frontend JS: авто-подключение viewed.css, авто-добавление класса row для .ms3rv__list, авто-рендер #ms3-recently-viewed и #ms3-similar.

[1.2.4] - 2026-03-02

Fixed

  • ms3recentlyviewedSimilar: стабильнее подбирает «Похожие». where передаётся JSON-массивом, просмотренные исключаются через id:NOT IN.
  • Тот же сниппет: усилен fallback whereresourcesms3recentlyviewed(ids)direct(sql+chunk).

[1.2.3] - 2026-03-02

Fixed

  • Деинсталляция EncryptedVehicle: класс загружается безопаснее, добавлен alias для xPDO class lookup.

[1.2.2] - 2026-03-01

Fixed

  • ms3recentlyviewedSimilar: глубина поиска категорий depth >= 2, fallback в корень каталога (parents=0, depth>=3).
  • Тот же сниппет: fallback по ID через БД в ms3rv_get_product_ids_from_parents() с учётом context_key.
  • Connector action=similar: явное переключение в контекст ms3recentlyviewed.context (по умолчанию web), защитный fallback при пустом ответе сниппета.
  • ms3recentlyviewed: при пустом ответе msProducts добавлен direct-рендер по ids.

[1.2.1] - 2026-02-28

Changed

  • Счётчик просмотренных показывает общее число товаров в списке, включая текущую страницу. Исключение текущего товара из подсчёта убрано.
  • ms3recentlyviewedSimilar: если все просмотренные в корне, msProducts ищет с depth не меньше 2, чтобы находить товары в подкатегориях.

Fixed

  • ms3recentlyviewedSimilar: пустой вывод из-за исключения просмотренных через resources (минусы). Заменено на where с id:NOT IN, потому что msProducts может не обрабатывать только отрицательные ID.
  • tplMs3rvLexiconScript: Fenom «Unexpected token '&'», литерал { обёрнут в {literal}.

[1.2.0] - 2026-02-27

Added

  • Интеграция jaybizzle/crawler-detect: боты через CrawlerDetect. Настройка block_bots_detector (crawler_detect / regex), при отсутствии vendor остаётся regex.

[1.1.0] - 2026-02-18

Added

  • lexicon/properties: описания параметров сниппетов (ids, tpl, emptyTpl, limit, depth) вместо ключей.
  • license.txt для коммерческого дополнения.
  • readme.txt: краткое описание, требования, установка, возможности (для пакета).
  • Топ-10: порядковый номер (ранг), колонка «#» сортируется, ранг обновляется при сортировке по любым колонкам.
  • Сниппет ms3rvDebugGetViews: заглушка для совместимости, возвращает пустую строку.

Changed

  • Модель xPDO: metadata.mysql.php на формат xPDO 3.0 (PSR-4 autoloading).
  • Файлы ms3recentlyviewedItem перенесены в model/ и model/mysql/ для корректной загрузки классов.
  • Админка: скролл контента вкладок (max-height для .p-tabpanels).
  • KPI «Всего просмотров»: подсказки периодов (сегодня / неделя / месяц) различаются цветом, увеличены отступы между блоками.
  • KPI-карточки: заголовки (Всего просмотров, Уникальных товаров и др.) выделены font-weight и цветом.
  • Стили: px заменены на rem.

Fixed

  • Деинсталляция: резолвер удаляет настройки с пустым ключом перед удалением namespace (избегает "Error removing dependent object").
  • Загрузка класса ms3recentlyviewedItem: ошибка «Could not load class» из-за устаревшего формата metadata.
  • Экспорт CSV: колонка User показывает «Гость» или email/username вместо 0/1.

[1.0.0] - 2026-02-12

Added

  • Блок «Недавно просмотренные» на страницах товара и каталога.
  • localStorage / cookie для списка просмотренных в браузере.
  • Синхронизация в БД для авторизованных (sync_enabled).
  • Админка: дашборд, топ товаров, история просмотров с фильтрами.
  • Экспорт CSV истории просмотров.
  • TTL и автоочистка, по умолчанию 90 дней.
  • Месячное архивирование для больших объёмов (опционально).
  • Сниппет «Похожие»: товары из тех же категорий.
  • Фильтрация ботов: краулеры не сохраняются (block_bots).
  • Слайдер с горизонтальной прокруткой и кнопками навигации.
  • Разметка карточек: Bootstrap, формы корзины (ms3_form).

Changed

  • tplViewedItem и tplSimilarItem: Bootstrap card, ms3_form.
  • viewed.css: счётчик, слайдер, пустое состояние.

Security

  • Коннектор: лексиконы для сообщений sync/get/track.
  • Коннектор админки: проверка CSRF (MODX HTTP_MODAUTH).
  • Удаление записей: проверка права save_log.

Последние обсуждения в сообществе MODX.pro