Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности

Вывод в админке в заказе данных из пользователя

Расширенные возможности Битрикса: создание кастомных блоков в карточке заказа | Готовый код

Расширенные возможности Битрикса: создание кастомных блоков в карточке заказа

⚡ Bitrix5 мин на чтение

Введение

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

В этой статье разберём простой пример реализации такого блока с использованием встроенного механизма обработки событий Битрикса и API работы с пользователями. Вы узнаете, как без модификации ядра добавить вкладку с произвольной информацией о клиенте прямо на страницу просмотра заказа.

Весь код размещается в /local/php_interface/init.php — никаких изменений в системных модулях не требуется.

Быстрый старт

КомпонентЗначение
СобытиеonSaleAdminOrderInfoBlockShow (модуль sale)
КлассыBitrix\Main\Event, Bitrix\Main\UserTable
Файл/local/php_interface/init.php
Поле пользователяUF_ABOUTUSER — создаётся в настройках
РезультатНовый блок EventResult::SUCCESS с массивом данных

Постановка задачи

Допустим, нам необходимо вывести дополнительную информацию о клиенте в карточку заказа. Например, это может быть описание самого клиента, зафиксированное в специальном пользовательском поле UF_ABOUTUSER. Это поле создаётся вручную в настройках сайта («Настройки» → «Пользователи» → «Пользовательские поля») и доступно для каждого зарегистрированного пользователя.

Задача состоит из трёх шагов:

  1. Получить данные пользователя, создавшего заказ.
  2. Прочитать значение поля UF_ABOUTUSER из его профиля.
  3. Отобразить это значение в отдельном блоке карточки заказа.
Подготовка: Прежде чем писать код, создайте пользовательское поле UF_ABOUTUSER для профиля пользователя через административную панель. Тип поля — «Строка» или «Текст», по желанию. Заполните это поле у нескольких тестовых пользователей, чтобы проверить результат.

Подключение обработчика события

Битрикс предоставляет событие onSaleAdminOrderInfoBlockShow, которое срабатывает при формировании страницы просмотра заказа в административной панели. Через него можно добавить произвольный блок с информацией.

Регистрируем обработчик в init.php:

<?php use Bitrix\Main\EventManager; // Подключаемся к событию отображения блока сведений о заказе $eventManager = EventManager::getInstance(); $eventManager->addEventHandler( 'sale', 'onSaleAdminOrderInfoBlockShow', 'onSaleAdminOrderInfoBlockShow' );

Разберём:

  1. Импорт — подключаем класс Bitrix\Main\EventManager для работы с событиями.
  2. РегистрацияaddEventHandler принимает модуль ('sale'), имя события ('onSaleAdminOrderInfoBlockShow') и имя функции-колбэка ('onSaleAdminOrderInfoBlockShow').

Обратите внимание: имя функции может быть любым. Мы назвали её так же, как событие, чтобы было понятнее — но это не обязательное условие.

Функция-обработчик: onSaleAdminOrderInfoBlockShow

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

use Bitrix\Main\UserTable; function onSaleAdminOrderInfoBlockShow(\Bitrix\Main\Event $event) { global $USER_FIELD_MANAGER; // Получаем объект заказа $order = $event->getParameter("ORDER"); // Получаем ID пользователя, оформившего заказ $userId = $order->getUserId(); if ($userId > 0) { // Загружаем профиль пользователя $userFields = UserTable::getList([ 'filter' => ['=ID' => $userId], 'select' => ['*'] ])->fetch(); // Проверяем наличие пользовательского поля и извлекаем его значение if (!empty($userFields['UF_ABOUTUSER'])) { $aboutuser = $userFields['UF_ABOUTUSER']; } } // Создание массива с результатами $resultArray = []; if (!empty($aboutuser)) { $resultArray[] = [ 'TITLE' => '<b>О покупателе:</b>', 'VALUE' => '<b>' . htmlspecialchars($aboutuser) . '</b>', 'ID' => 'o_pokupatele', ]; } return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, $resultArray ); }

Подробности реализации

Разберём код по шагам:

Шаг 1. Обработчик события

Событие onSaleAdminOrderInfoBlockShow срабатывает при открытии страницы конкретного заказа в административной панели («Магазин» → «Заказы» → «Просмотр заказа»). Оно передаёт объект заказа через параметр "ORDER". Это стандартный механизм Битрикса для расширения интерфейса без изменения ядра.

Шаг 2. Получение данных пользователя

Через метод $order->getUserId() получаем ID пользователя, оформившего заказ. Затем с помощью UserTable::getList() (API модуля main) загружаем все поля профиля. Нас интересует пользовательское поле UF_ABOUTUSER — если оно заполнено, сохраняем значение в переменную $aboutuser.

Важно: Пользовательское поле UF_ABOUTUSER должно быть предварительно создано в административной панели. Если поле отсутствует или не заполнено у конкретного пользователя — блок просто не отобразится, ошибки не будет.

Шаг 3. Формирование возвращаемого результата

Собираем массив $resultArray, где каждый элемент — это структура с ключами:

  • TITLE — заголовок блока (поддерживается HTML);
  • VALUE — содержимое блока;
  • ID — уникальный строковый идентификатор блока.

Передаём массив в конструктор EventResult со статусом EventResult::SUCCESS. Битрикс сам подставит полученные данные в интерфейс карточки заказа.

Почему htmlspecialchars? Мы оборачиваем значение поля в htmlspecialchars(), чтобы избежать XSS-уязвимостей: данные из пользовательского поля могут содержать HTML или JavaScript, и перед выводом их обязательно нужно экранировать.

Шаг 4. Проверка наличия значения

Перед добавлением элемента в массив мы проверяем, что переменная $aboutuser существует и не пуста (!empty($aboutuser)). Это обязательная проверка: если передать пустое значение, Битрикс может выбросить исключение ArgumentNullException. Блок появится только тогда, когда поле действительно заполнено.


Полный код для копирования

Готовый блок, который можно вставить в /local/php_interface/init.php:

<?php // ============================================================ // Кастомный блок в карточке заказа Битрикс // Отображает значение пользовательского поля UF_ABOUTUSER // ============================================================ use Bitrix\Main\EventManager; use Bitrix\Main\UserTable; $eventManager = EventManager::getInstance(); $eventManager->addEventHandler( 'sale', 'onSaleAdminOrderInfoBlockShow', 'onSaleAdminOrderInfoBlockShow' ); function onSaleAdminOrderInfoBlockShow(\Bitrix\Main\Event $event) { global $USER_FIELD_MANAGER; $order = $event->getParameter("ORDER"); $userId = $order->getUserId(); if ($userId > 0) { $userFields = UserTable::getList([ 'filter' => ['=ID' => $userId], 'select' => ['*'] ])->fetch(); if (!empty($userFields['UF_ABOUTUSER'])) { $aboutuser = $userFields['UF_ABOUTUSER']; } } $resultArray = []; if (!empty($aboutuser)) { $resultArray[] = [ 'TITLE' => '<b>О покупателе:</b>', 'VALUE' => '<b>' . htmlspecialchars($aboutuser) . '</b>', 'ID' => 'o_pokupatele', ]; } return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, $resultArray ); }

После вставки не забудьте создать пользовательское поле UF_ABOUTUSER в административной панели и заполнить его у тестовых пользователей.


Заключение

Использование подобной методики позволяет значительно расширить функциональность административной панели, делая работу сотрудников быстрее и удобнее. Такой подход помогает упростить рутинные операции, повысить эффективность бизнес-процессов и улучшить взаимодействие с клиентами.

Применяя описанные техники, вы сможете создавать собственные уникальные расширения для вашей CRM-системы на Битриксе, оптимизировать рабочие процессы и сократить временные затраты на обработку заказов.


Часто задаваемые вопросы

Как добавить кастомный блок в карточку заказа Битрикс?

Подпишитесь на событие onSaleAdminOrderInfoBlockShow модуля sale, в обработчике получите объект заказа через $event->getParameter("ORDER") и верните массив с ключами TITLE, VALUE, ID через EventResult::SUCCESS.

Какое событие отвечает за вывод блоков в карточке заказа?

onSaleAdminOrderInfoBlockShow — срабатывает при открытии страницы просмотра заказа в админ-панели. Позволяет добавлять произвольные информационные блоки без изменения ядра.

Как получить ID пользователя из объекта заказа в Bitrix?

Используйте метод $order->getUserId() — он возвращает числовой идентификатор пользователя, создавшего заказ. Для заказов, оформленных гостем, вернётся 0.

Почему блок не отображается в карточке заказа?

Возможные причины: не создано пользовательское поле UF_ABOUTUSER; поле не заполнено у данного пользователя; не подключён файл init.php; событие зарегистрировано с ошибкой в имени модуля или события.

Можно ли выводить несколько блоков?

Да — добавьте несколько элементов в массив $resultArray. Каждый элемент должен иметь уникальный ID. Битрикс отобразит все переданные блоки в порядке их добавления.


Ключевые моменты

  • СобытиеonSaleAdminOrderInfoBlockShow — срабатывает при просмотре заказа в админке, позволяет добавлять произвольные блоки
  • Данные Объект заказа получается через $event->getParameter("ORDER"), ID пользователя — через $order->getUserId()
  • ПолеUF_ABOUTUSER создаётся вручную в настройках пользовательских полей; если не заполнено — блок не отображается
  • Безопасность Обязательно экранируйте выводимые данные через htmlspecialchars() для защиты от XSS
  • Результат Возвращается через EventResult::SUCCESS с массивом, содержащим ключи TITLE, VALUE, ID
Назад к списку