Использование метода CUser::IsOnLine в 1С-Битрикс

В системе управления контентом 1С-Битрикс часто возникает необходимость отслеживать статус пользователей, чтобы отображать их активность на сайте или в интерфейсе. Для этого существует полезный статический метод CUser::IsOnLine, который позволяет определить, находится ли пользователь в сети.

Использование метода CUser::IsOnLine в 1С-Битрикс

Этот метод проверяет время последней активности пользователя и сравнивает его с указанным интервалом времени, что дает возможность точно понять, является ли пользователь активным или нет.

Описание метода CUser::IsOnLine

Метод CUser::IsOnLine используется для проверки, находится ли пользователь в сети на основе его последней активности. Он является статическим, что означает, что его можно вызвать без создания объекта класса CUser. Метод принимает два параметра:

Параметры метода:

  1. $id (обязательный) — ID пользователя, чей статус нужно проверить.
  2. $interval (необязательный) — интервал времени в секундах, в течение которого пользователь считается "онлайн". Если параметр не передан, используется значение по умолчанию, которое можно получить с помощью метода GetSecondsForLimitOnline().

Пример использования:

CUser::IsOnLine($USER->GetID());

Этот вызов проверяет, находится ли текущий пользователь (ID которого доступен через $USER->GetID()) в сети.

Чтобы метод работал, необходимо в init.php добавить


$eventManager = Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'OnBeforeProlog');
function OnBeforeProlog() {
    global $USER;
    if ($USER->IsAuthorized()) {
        CUser::SetLastActivityDate($USER->GetID());
    }
}

Реальные примеры использования

1. Проверка статуса пользователя

Самый простой способ использования метода — это проверка, находится ли пользователь в сети:

if (CUser::IsOnLine($USER->GetID())) {
    echo "Пользователь " . $USER->GetFullName() . " в сети.";
} else {
    echo "Пользователь " . $USER->GetFullName() . " не в сети.";
}

В этом примере метод CUser::IsOnLine проверяет статус пользователя по его ID и выводит соответствующее сообщение.

2. Отображение статуса пользователя в профиле

Для отображения статуса пользователя в интерфейсе можно использовать условие, которое будет изменять цвет текста в зависимости от того, онлайн ли пользователь:

$userId = $USER->GetID();
if (CUser::IsOnLine($userId)) {
    echo "В сети";
} else {
    echo "Не в сети";
}

Здесь используется условие для отображения статуса пользователя в цвете — зеленом, если он в сети, и красном, если оффлайн.

3. Список пользователей с их статусом

Можно создать список нескольких пользователей с их текущим статусом:

$users = [1, 2, 3]; // Массив ID пользователей
foreach ($users as $userId) {
    $user = new CUser;
    $user->GetByID($userId);
    echo $user->GetFullName() . ': ';
    echo CUser::IsOnLine($userId) ? "в сети
" : "не в сети
"; }

Этот код позволяет пройтись по массиву пользователей и вывести их имя с соответствующим статусом.

4. Определение статуса для чата

Часто бывает необходимо определить, доступен ли пользователь для общения в чате. Используя метод CUser::IsOnLine, можно управлять отображением кнопки чата:

if (CUser::IsOnLine($USER->GetID())) {
    echo "
Вы можете начать чат!
"; } else { echo "
Пользователь оффлайн.
"; }

В этом примере показывается, доступен ли пользователь для чата в зависимости от его статуса.

5. Фильтрация пользователей по статусу

Вы можете отфильтровать пользователей, чтобы получить только тех, кто в сети:

$onlineUsers = [];
foreach ($users as $userId) {
    if (CUser::IsOnLine($userId)) {
        $onlineUsers[] = $userId;
    }
}
echo "Онлайн пользователи: " . implode(", ", $onlineUsers);

Этот код создает список пользователей, которые находятся в сети, и выводит их ID.

6. Уведомление о новых сообщениях

Когда необходимо отправить уведомление пользователю, который находится в сети, можно использовать метод CUser::IsOnLine для уведомления:

if (CUser::IsOnLine($recipientId)) {
    echo "Уведомление: Сообщение отправлено пользователю " . $recipientName . ", который сейчас в сети.";
} else {
    echo "Уведомление: Сообщение отправлено пользователю " . $recipientName . ", который не в сети.";
}

Здесь проверяется, в сети ли получатель, и на основе этого выводится соответствующее уведомление.

7. Статус в административной панели

Для администраторов важно видеть, активен ли пользователь, например, на странице управления пользователями:

if (CUser::IsOnLine($userId)) {
    echo "Активен";
} else {
    echo "Неактивен";
}

Этот код позволяет отображать активность пользователей в админке с помощью различных цветов.

8. Уведомление о выходе из системы

Если пользователь выходит из системы, можно вывести уведомление с помощью метода CUser::IsOnLine:

if (!CUser::IsOnLine($USER->GetID())) {
    echo "Вы вышли из системы. Пожалуйста, войдите снова.";
}

Этот код отображает сообщение, если пользователь не в сети, например, после выхода из системы.

Важные аспекты работы метода

  • Интервал активности: Параметр $interval позволяет настроить, за какой период времени после последней активности пользователь будет считаться онлайн. Если интервал не передан, используется значение по умолчанию.
  • Обновление времени активности: Метод CUser::IsOnLine использует поле LAST_ACTIVITY_DATE из таблицы b_user для определения, когда был последний визит пользователя.
  • Производительность: Поскольку метод работает с базой данных, большое количество запросов для проверки статуса пользователей может нагрузить сервер. Рекомендуется использовать этот метод эффективно и избегать частых запросов в условиях большого количества пользователей.

Заключение

Метод CUser::IsOnLine в 1С-Битрикс предоставляет удобный способ для мониторинга активности пользователей на сайте. С его помощью можно создать функциональность для отображения статуса пользователей, организации чатов, фильтрации онлайн-пользователей и других задач, связанных с определением состояния активности пользователей.

Теги:  CUser::IsOnLine, активность пользователей, статус пользователей, онлайн, оффлайн

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

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