Показать пользователей онлайн на странице сайта

Просмотров: 150

Задача: показать на странице сайта пользователей которые сейчас находятся на сайте. Используется штатный модуль "Веб-аналитика" - должен быть установлен.

Пользователи онлайн, показать на странице сайта

Онлайн ли автор элемента инфоблока

Предположим у нас сайт, где любой пользователь может написать новость или добавить любой элемент инфоблока. На детальной странице нужно вывести статус автора в виде "в сети / не в сети".

В шаблоне детальной новости (сработает и с шаблоном детальной карточки товара) создаем файл result_modifier.php и добавляем него следующий код

use \Bitrix\Main\Loader;
Loader::includeModule('statistic');

$rsData = CUserOnline::GetList(
    $guest_count,
    $session_count,
    false,
    array (
        'LAST_USER_ID' => $arResult['CREATED_BY'],
        'USER_AUTH' => 'Y',
    ),
);
while ($ar = $rsData->Fetch())
{
    $arResult['AUTHOR_IS_ONLINE'] = 'Y';
}

Далее, в template.php добавляем:

if ($arResult['AUTHOR_IS_ONLINE']) {
    echo 'Автор в сети';
} else {
    echo 'Автор не сети';
}

С помощью метода CUserOnline::GetList, модуля веб аналитики, отфильтровали ID пользователя который создал запись (хранится в $arResult['CREATED_BY']) и убедились что он сейчас авторизован.

Дальше можно дополнить массив и остальными полями автора, как пользователя (Ф.И.О. дату рождения итд) используя примеры из заметки:
Поля пользователя через API D7

Кто из авторизованных просматривает новость

Предположим, хотим на странице новости вывести имена пользователей, которые прямо сейчас просматривают конкретную новость. В result_modifier.php добавляем:

use \Bitrix\Main\Loader;
use Bitrix\Main\UserTable;
Loader::includeModule('statistic');

$rsData = CUserOnline::GetList(
    $guest_count,
    $session_count,
    false, // можно сортировать
    array(
        'USER_AUTH' => 'Y',
        'URL_LAST' => $APPLICATION->GetCurUri()
    ),
);
while ($ar = $rsData->Fetch()) {
    $arResult['ONLINE_USERS'][] = UserTable::getList([
        'filter' => [
            'ID' => $ar['LAST_USER_ID']
        ],
        'select' => [
            'NAME' // Можно выбрать все поля через '*'
        ]
    ])->fetch();
}

В template.php добавляем:

echo implode(
   ',' , 
   $arResult['ONLINE_USERS']
);

В фильтр передали URL_LAST в нем находится последняя посещенная пользователем страница, по факту текущая активная в его сессии и сравнили с текущей страницей сайта. Тут используйте CMain::GetCurPage, CMain::GetCurDir, GetDirPath в зависимости от настроек ЧПУ детального показа новости. Либо можно получить текущий адрес новости из настроек компонента (наверное, так даже правильнее).

Дальше получили имя пользователя (можете получить любые поля в 'select') и наполнили массив $arResult['ONLINE_USERS']. Этот массив вывели в нужном месте шаблона добавив запятую в перечиследние пользователей. Само собой, здесь можете использовать foreach что бы сделать красивее.

Все поля метода CUserOnline::GetList, по которым можно фильтровать и получать данные:

[ID] => ID сессии
[HITS] => количество хитов сессии
[LAST_USER_ID] => ID пользователя, под которым последний раз был авторизован посетитель
[USER_AUTH] => флаг авторизован ли посетитель в данной сессии (Y - да; N - нет)
[STOP_LIST_ID] => ID записи стоп-листа, под которую попал посетитель (если это имело место быть)
[GUEST_ID] => ID посетителя
[NEW_GUEST] => флаг новый посетитель (Y - новый; N - вернувшийся)
[FAVORITES] => флаг добавлял ли посетитель сайт в  Избранное в данной сессии
[COUNTRY_ID] => ID страны посетителя
[COUNTRY_NAME] => название страны посетителя
[ADV_ID] => ID рекламной кампании
[ADV_BACK] => флаг прямого захода (N) или  возврата (Y) по рекламной кампании
[REFERER1] => идентификатор referer1 рекламной кампании
[REFERER2] => идентификатор referer2 рекламной кампании
[REFERER3] => дополнительный параметр рекламной кампании
[FIRST_URL_FROM] => ссылающаяся страница, с которой посетитель впервые пришел на сайт
[URL_FROM] => откуда пришел, самая первая старница захода в сессию
[FIRST_SITE_ID] => если был переход из сайта в многосайтовости, будет id сайта откуда
[URL_LAST] => страница последнего хита сессии
[URL_LAST_404] => флаг 404 ошибки на последней странице сессии (Y - да; N - нет)
[LAST_SITE_ID] => ID сайта на последнем хите сессии
[IP_LAST] => IP адрес посетителя на последнем хите сессии (в виде: XXX.XXX.XXX.XXX)
[DATE_LAST] => время последнего хита
[SESSION_TIME] => разница во времени между первым и последним хитом сессии (сек.)
Михаил Базаров 21.09.2024
Две ссылки метода, тоже можно использовать на свое усмотрение:
Код
guest_counter => Будет содержать количество посетителей в online.
session_counter => Будет содержать количество сессий посетителей в online.

Блог-note: заметки разработчика

Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс

Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одной заморочки: в типовой постав...

Добавление в избранное или отложенные, на AJAX из карточки товара

В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "Избранное". Для этого будем исп...

Получить множественное пользовательское поле раздела. Значения множественного UF_ поля через API

Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно получить и вывести всю информац...

Отфильтровать новости в Битрикс за заданный период

Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компонента "список новостей". Для э...

Мобильные версии страниц и поисковые системы

Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеется мобильная версия, нужно увед...

Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый заказ"

Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битрикс "Новый заказ", у вас это н...

Автоматическая загрузка каталогов из csv файлов в Битрикс

Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В 1С-Битрикс, уже есть весь не...

Создание PWA для сайта на 1С-Битрикс

Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего на 1С-Битрикс, данная заметка ...

Список новостей с автопрокруткой через overflow:scroll

Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточно актуально для новостных сайт...