Skip to content
msViewCounter
msViewCounter
Счётчик просмотров и активных посетителей товара для MiniShop3
  • MODX 3
  • PHP 8.2
  • miniShop3
  1. Компоненты
  2. msViewCounter
  3. Начало работы
  4. Системные настройки

Системные настройки ​

Все ключи в пространстве имён msviewcounter. Области: msviewcounter_main, msviewcounter_boost, msviewcounter_fake.

Система → Системные настройки → фильтр msviewcounter.

Основные (msviewcounter_main) ​

КлючТипПо умолчаниюМинимумОписание
msviewcounter_modeТекстreal—Режим: real, boost или fake
msviewcounter_show_totalДа/НетДа—Показывать строку «Этот товар просмотрели…»
msviewcounter_show_onlineДа/НетДа—Показывать строку «Сейчас смотрят…»
msviewcounter_online_ttlЧисло12030Сколько секунд посетитель считается active
msviewcounter_heartbeat_intervalЧисло3010Интервал heartbeat-запросов (сек)
msviewcounter_cleanup_intervalЧисло30060Как часто запускается очистка устаревших active-сессий (сек)
msviewcounter_cleanup_batch_limitЧисло1000100Максимум строк за одно удаление в msviewcounter_active
msviewcounter_dedup_sessionДа/НетДа—Не увеличивать total повторно в той же сессии
msviewcounter_block_botsДа/НетДа—Исключать ботов из записи статистики
msviewcounter_debug_modeДа/НетНет—Отладочный вывод в консоли браузера

Границы значений применяются молча

Пакет не показывает ошибку и не пишет в лог, а подставляет минимум: введёте online_ttl = 10 — получите 30, heartbeat_interval = 5 — получите 10. В форме при этом остаётся введённое вами число, то есть реальное значение посмотреть негде.

Границы применяет Config::fromModx() при каждом чтении настроек (src/Config.php:46-59), поэтому «забытое» значение исправляется само. Затронуты девять настроек:

КлючМинимум
msviewcounter_online_ttl30
msviewcounter_heartbeat_interval10
msviewcounter_cleanup_interval60
msviewcounter_cleanup_batch_limit100
msviewcounter_boost_total_base0
msviewcounter_boost_total_multiplier0
msviewcounter_boost_total_jitter_max0
msviewcounter_boost_online_base0
msviewcounter_boost_online_jitter_max0

Отдельно fake_total_min / fake_total_max и fake_online_min / fake_online_max проходят через orderedBounds(): если минимум больше максимума, значения меняются местами, отрицательные обрезаются до нуля, а равные дают фиксированное число без разброса. Пустой fake_salt заменяется дефолтом.

Значения show_total и show_online управляют только выводом. Запись просмотров в msviewcounter_totals идёт независимо от них: если show_total = Нет, просмотры всё равно копятся. Флаги читает ViewCounter::counterInput(): если соответствующий флаг выключен, в стратегию идёт 0.

msviewcounter_mode ​

Обычное текстовое поле: значение вводится строкой. Любое неизвестное значение трактуется как real.

ЗначениеПоведение
realРеальные просмотры и active-сессии в БД, на витрине — без преобразований
boostЗапись в БД как в real, на витрине — формулы с base, multiplier и дневным jitter
fakeСинтетические числа по hash(pid + salt), без записи в БД и без heartbeat JS

Подробное описание каждого режима, формулы и примеры: Интеграция — режимы работы.

online_ttl и heartbeat_interval ​

online_ttl должен быть больше heartbeat_interval, иначе сессия успеет «протухнуть» между ping-запросами. Рекомендуемое соотношение: TTL в 3–4 раза больше интервала (по умолчанию 120 / 30).

Интервал ограничивается снизу дважды: в PHP (Config::fromModx(), минимум 10) и в браузере (Math.max(10, …) в viewcounter.js). Значение меньше 10 секунд одинаково станет 10 на обеих сторонах.

Очистка active-сессий ​

Два ключа работают в паре, но задают разное:

  • online_ttl — порог устаревания. Строка считается старой, если last_seen старше, чем online_ttl секунд. Этот же порог используется и при подсчёте online, и при удалении.
  • cleanup_interval — только периодичность прохода. Ничего не удаляет само по себе, лишь задаёт, как часто разрешено запускать удаление.

Проход запускается из heartbeat, а не по cron. Часовой интервал хранится в кеше под ключом msviewcounter_last_cleanup. Пока идёт heartbeat, очистка выполняется не реже, чем раз в cleanup_interval секунд.

Отсюда следствие: если msviewcounter_show_online = Нет или режим fake, heartbeat не отправляется и очистка не идёт никогда — таблица msviewcounter_active растёт, пока online включён заново.

Boost (msviewcounter_boost) ​

Используются при msviewcounter_mode = boost. Raw-данные берутся из БД (как в real), на витрине применяются формулы — см. Интеграция — boost.

КлючТипПо умолчаниюМинимумОписание
msviewcounter_boost_total_baseЧисло00Минимум total в выводе
msviewcounter_boost_total_multiplierТекст10Множитель реального total
msviewcounter_boost_total_jitter_maxЧисло00Максимальный стабильный дневной разброс total
msviewcounter_boost_online_baseЧисло10Минимум online в выводе
msviewcounter_boost_online_jitter_maxЧисло20Максимальный стабильный дневной разброс online

Отрицательные значения обрезаются до нуля. boost_total_multiplier вводится текстом и приводится к числу с плавающей точкой.

Boost с настройками по умолчанию не меняет ничего

Дефолт base = 0, multiplier = 1, jitter_max = 0 даёт ровно то же число, что и real. Чтобы boost отличался от честного режима, поднимите boost_total_base или boost_total_jitter_max — иначе переключение режима не изменит витрину.

Fake (msviewcounter_fake) ​

Используются при msviewcounter_mode = fake. Числа считаются детерминированно по ID товара и salt — см. Интеграция — fake.

КлючТипПо умолчаниюОписание
msviewcounter_fake_total_minЧисло50Минимум синтетических просмотров
msviewcounter_fake_total_maxЧисло500Максимум синтетических просмотров
msviewcounter_fake_online_minЧисло1Минимум синтетического online
msviewcounter_fake_online_maxЧисло8Максимум синтетического online
msviewcounter_fake_saltТекстmsviewcounterСоль для стабильных значений по ID товара

Значения привязаны к ID товара и salt: обновление страницы не меняет числа. Смена fake_salt пересчитывает все fake-значения.

Пакет нормализует границы сам, без ошибок:

  • min больше max — значения меняются местами, диапазон остаётся рабочим.
  • Отрицательные значения — обрезаются до 0.
  • Равные min и max — разброса нет, все товары получают одно и то же число. Это полезно, если нужен фиксированный «вес» витрины.
  • fake_salt пустой или из пробелов — используется значение по умолчанию msviewcounter. Значение обрезается от краёв.

Рекомендуемые профили ​

Честная статистика на рабочем магазине ​

  • msviewcounter_mode = real
  • show_total и show_online = Да
  • dedup_session = Да, block_bots = Да

Новый магазин без истории ​

  • msviewcounter_mode = fake
  • Настроить диапазоны fake_total_* и fake_online_*

Реальные данные с минимальной базой ​

  • msviewcounter_mode = boost
  • boost_total_base > 0 и/или boost_online_base ≥ 1
  • Небольшой boost_online_jitter_max, например 2

Только просмотры, без online ​

  • show_total = Да, show_online = Нет
  • Heartbeat JS не подключается
  • Очистка msviewcounter_active при этом тоже не идёт

Лексикон текстов ​

Тексты «Этот товар просмотрели…» и «Сейчас смотрят…» берутся из лексикона msviewcounter:

КлючНазначение
msviewcounter_total_textШаблон строки total
msviewcounter_online_textШаблон строки online
msviewcounter_view_word_*Склонение «раз / раза / раз»
msviewcounter_person_word_*Склонение «человек / человека / человек»

Пакет выбирает форму по числу сам, вам не нужно дублировать тексты под каждое значение:

ФормаКогда выбираетсяПример
_1последняя цифра 1 (кроме 11–14)1 просмотр, 21 просмотр
_2последняя цифра 2–42 просмотра, 103 просмотра
_50, 5–9, 11–14, а также 111–1145 просмотров, 11 просмотров

В лексиконе есть английский вариант (lexicon/en), поэтому строки сайта на английском подставляются автоматически.

Ключ msviewcounter_invalid_product не используется

Он объявлен в лексиконе ru и en, но код его не вызывает. При pid <= 0 сниппет молча возвращает пустую строку, без текста с ошибкой.

См. также ​