«Фавориты Успеха» logo Сеанс голосования
© FAVOR.com.ua
 
Сеанс голосования
  

13.03.2017 введено понятие «сеанса голосования» и его продолжительности, в часах.

Это сделано для такого:

  1. Чтобы давать возможность беспрепятственно и без задержки голосовать в каком-то количестве номинаций (это не попытка быстро пройти тест ради получения приза);
  2. Чтобы не показывать попапы (напр. демографические данные) пока мы не успели проголосовать. (Чтобы не задолбать юзера раньше чем он успеет что либо сделать).

Аналогичным образом мы смотрим на количество просмотров результатов голосования, чтобы:

  1. Контроллировать количество категорий с результатами, которые юзер посмотрел. (Мы не против свободного просмотра какого-то количества, а потом будем требовать проголосовать).

В принципе, у нас уже была хорошая подготовка к этому, переменные

$free_result_cats   = 5; // сколько категорий мы можем беспрепятственно просмотреть в течение сеанса голосования
$demography_ask_cats = 2; // после скольки проголосованых категорий можно показывать попапы (спрашивать демографические данные)
$poll_delay_per_item   = 2600;
$poll_delay_dependence = ’C’;

К ним добавлены

$vote_session_hours = 4; // сколько часов длится текущий подход к опросу.
$vote_nodelay_cats = 10; // во скольки категориях (в течение сеанса) юзер может свободно проголосовать так, чтобы не видеть предупреждений из-за «быстрого» голосовования

Но выше это всё настройки. В рантайме у сайта появляются новые функции для контроля. (Я думал сделать переменными, но они нужны довольно редко, проще вызывать функу, которая выудит нужное значение из куки). Функи такие:

  1. get_session_cats(’имя счётчика’) — получает значение счётчика по имени.
  2. inc_session_cats(’имя счётчика’, $ID_категории) — увеличивает счётчик по имени на единицу, если категория отличается от прошлой, в которой счётчик увеличился на единицу.
  3. Бонус: is_allow_free_results($ID_категории). — проверка может ли юзер посмотреть результаты голосования. Если ещё может (и $ID_категории указан) — увеличить счётчик на единицу — типа результаты ещё одной категории просмотрены. При необходимости эту функу можно будет сделать более универсальной в будущем, позволить указывать имя счётчика и его максимальное значение параметром.

Ради дебага модератору выводятся (в шапку рядом с линтером) значения счётчиков ’vote’ (кол-во категорий проголосованых за сеанс) и ’rslt’ (кол-во категорий показаных за сеанс, но их не будет больше значения указанного в $free_result_cats).

Технически оба значения сохраняются в куки с короткими именами snn_имясчётчика.

В куки хранится не только значение как счётчика, но и идентификатор категории, в которой они были задействованы. Чтобы не делать лишних повторных инкрементов. Куки имеют строковой формат, 2 значения пишутся через запятую: cnt,id. cnt — количество голосов или просмотров за сессию, id — идентификатор последней категории, в которой был голос или просмотр результатов.

https://favor.com.ua/ru/blogs/28329.html