Считаем визиты пользователя
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.25, ЧПУ, Font Face
- 460 просмотров
- 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.
Новый комментарий
Ошибка
Выполнено