- Проверено Modstore
- Бесплатные будущие обновления
- Работа на тестовом и публичном домене
- 12 месяцев тех. поддержки
👁️ Недавно просмотренные товары для 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, цепочкаwhere→resources(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из cookiems3_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). Один fallbackrawurldecode, если в строке есть%и первый разбор дал пусто.- Плагин
ms3recentlyviewedViewedIdsPlaceholder: priority-5наOnWebPageInit, раньше соседних плагинов с priority 0.
[1.2.5] - 2026-03-02
Fixed
ms3recentlyviewedSimilar: зафиксирована цепочка выводаwhere→resources→ms3recentlyviewed(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
where→resources→ms3recentlyviewed(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