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

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

  • 187 просмотров
  • 1 октября, 2023
  • Обновлено: 16 октября, 2023
  • admin
  • Время чтения: 3 минуты
  • 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 минут
Комментарии отсутствуют