Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

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

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

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

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

use \Bitrix\Main\Loader;
Loader::includeModule('statistic');
$rsData = CUserOnline::GetList(
    $guest_count,
    $session_count,
    false,
    array (
        'USER_AUTH' => 'Y',
    ),
);
while ($ar = $rsData->Fetch())
{
    if ($ar['LAST_USER_ID'] === $arResult['CREATED_BY']) {
        $arResult['AUTHOR_IS_ONLINE'] = 'Y';
    }
}

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

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

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

Дальше можно дополнить массив и остальными полями автора, как пользователя (Ф.И.О. дату рождения итд) используя примеры из заметки:
Поля пользователя через 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] => разница во времени между первым и последним хитом сессии (сек.)
Услуги

Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс