Добро пожаловать на сайт SEDBY

Считаем визиты пользователя

  • 574 просмотра +1
  • 1 октября, 2023
  • Обновлено: 16 октября, 2023
  • admin
  • Время чтения: 4 минуты
  • 1 (Подробно)

Можно ли считать визиты пользователя на сайте и как это сделать? Такой вопрос был задан в одной из тем форумов Котонти. Для начала определим исходные параметры:

  1. Пользователь – зарегистрированный аккаунт на сайте (незарегистрированных оставим для серьезных систем сбора статистики).
  2. Посещение – открытие пользователем любой локации (страницы) на сайте.
  3. Визит набор посещений, которые не прерываются определенным временем. Яндекс Метрика считает, что это 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. Напомним основную логику работы плагина:

  1. Проверяем, зарегистрирован ли пользователь
  2. Фиксируем дату начала сбора статистики (только если до этого она не собиралась)
  3. Фиксируем дату текущего посещения
  4. Сравниваем дату последнего посещения и разность текущей даты и времени, отводимого на визит
  5. Если разница по времени с последнего посещения превышает установленное значение, фиксируем визит
  6. Обновляем значения в базе

Сообразно этому формируем код плагина:

<?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.


Комментарии:
Комментарии отсутствуют

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость