Считаем визиты пользователя
- 392 просмотра
- 1 октября, 2023
- Обновлено: 16 октября, 2023
- admin
- Время чтения: 3 минуты
- 1 (Подробно)
Можно ли считать визиты пользователя на сайте и как это сделать? Такой вопрос был задан в одной из тем форумов Котонти. Для начала определим исходные параметры:
- Пользователь – зарегистрированный аккаунт на сайте (незарегистрированных оставим для серьезных систем сбора статистики).
- Посещение – открытие пользователем любой локации (страницы) на сайте.
- Визит набор посещений, которые не прерываются определенным временем. Яндекс Метрика считает, что это 30 минут. Возьмем этот показатель в качестве дефолтного.
Напомним, что количество визитов – это не количество авторизаций, и значение поля user_logcount представляет собой количество именно успешных авторизаций, а не просмотренных пользователем страниц или совершенных визитов.
Начнем собирать наш плагин. Первым делом надо решить, где хранить собранные данные. Самым простым будет использование экстраполей в модуле users. Это удобно, поскольку массив $usr[‘profile’] доступен глобально, а соответствующие теги всегда будут сформированы функцией cot_generate_usertags().
В папке setup создаем файл установок truevisits.install.php
<?php /** * [SEDBY] Truevisits install handler * * @package truevisits * @version 1.00b * @author sed.by * @copyright Copyright (c) sed.by 2023 * @license BSD */ defined('COT_CODE') or die('Wrong URL'); global $R; $db_users = Cot::$db->users; cot_extrafield_add($db_users, 'truevisits_since', 'input', $R['input_text'], '', '', false, '', 'Visits since', '', 1, false, 'INT NOT NULL DEFAULT 0'); cot_extrafield_add($db_users, 'truevisits_last', 'input', $R['input_text'], '', '', false, '', 'Last visit', '', 1, false, 'INT NOT NULL DEFAULT 0'); cot_extrafield_add($db_users, 'truevisits_count', 'input', $R['input_text'], '', '', false, '', 'Visit count', '', 1, false, 'INT NOT NULL DEFAULT 0');
Пояснения здесь требует только выбор типа экстраполя: INT. Он использован, поскольку даты мы будем хранить в целочисленном формате UNIX Timestamp.
Здесь же сразу добавим и файл удаления truevisits.uninstall.php
<?php /** * [SEDBY] Truevisits uninstall handler * * @package truevisits * @version 1.00b * @author sed.by * @copyright Copyright (c) sed.by 2023 * @license BSD */ defined('COT_CODE') or die('Wrong URL'); $db_users = Cot::$db->users; cot_extrafield_remove($db_users, 'truevisits_since'); cot_extrafield_remove($db_users, 'truevisits_last'); cot_extrafield_remove($db_users, 'truevisits_count');
Теперь разберемся с кодом. Он будет находиться в одном файле – truevisits.global.php. Напомним основную логику работы плагина:
- Проверяем, зарегистрирован ли пользователь
- Фиксируем дату начала сбора статистики (только если до этого она не собиралась)
- Фиксируем дату текущего посещения
- Сравниваем дату последнего посещения и разность текущей даты и времени, отводимого на визит
- Если разница по времени с последнего посещения превышает установленное значение, фиксируем визит
- Обновляем значения в базе
Сообразно этому формируем код плагина:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=global [END_COT_EXT] ==================== */ /** * [SEDBY] Truevisits main script * * @package truevisits * @version 1.00b * @author sed.by * @copyright Copyright (c) sed.by 2023 * @license BSD */ defined('COT_CODE') or die('Wrong URL'); if ($usr['id']) { $db_users = Cot::$db->users; ($usr['profile']['user_truevisits_since'] == 0) && $tv['user_truevisits_since'] = $sys['now_offset']; $tv['user_truevisits_last'] = $sys['now_offset']; if (($sys['now_offset'] - Cot::$cfg['plugin']['truevisits']['duration']) > $usr['profile']['user_truevisits_last']) { $tv['user_truevisits_count'] = ++$usr['profile']['user_truevisits_count']; } Cot::$db->update($db_users, $tv, 'user_id = ' . $usr['id']); }
Нам осталось только сформировать файл truevisits.setup.php
<?php /* ==================== [BEGIN_COT_EXT] Code=truevisits Name=[SEDBY] True Visits Category=community-social Description=Count visits of a registered user Version=1.00b Date=2023-09-30 Author=Dmitri Beliavski Copyright=All rights reserved (c) Dmitri Beiavski 2023 Notes=BSD License SQL= Auth_guests=R Lock_guests=12345WA Auth_members=R Lock_members=12345WA Recommends_modules= Recommends_plugins= [END_COT_EXT] [BEGIN_COT_EXT_CONFIG] duration=01:string::1800:Min duration in seconds to finish a visit [END_COT_EXT_CONFIG] ==================== */ /** * [SEDBY] Truevisits setup * * @package truevisits * @version 1.00b * @author sed.by * @copyright Copyright (c) sed.by 2023 * @license BSD */ defined('COT_CODE') or die('Wrong URL');
Здесь нам понадобилось только добавить единственную настройку – продолжительность, которую мы будем считать визитом. Как говорилось ранее, это будет 30 минут, или 1800 секунд.
Если вам необходимо готовое решение, можете скачать готовый плагин Truevisits.
Новый комментарий