Расширенные возможности Битрикса: создание кастомных блоков в карточке заказа
При работе с крупными проектами на платформе Битрикс нередко возникает необходимость расширять стандартные функциональные возможности системы, адаптировав интерфейс администрирования под специфику бизнеса. Одной из востребованных задач является внедрение собственных информативных блоков в карточку заказа, позволяющих администраторам быстро получать доступ к важным данным покупателя.
В данном материале мы рассмотрим простой пример реализации такого блока, демонстрируя использование встроенного механизма обработки событий Битрикса и API работы с пользователями.
Постановка задачи
Допустим, нам необходимо вывести дополнительную информацию о клиенте в карточку заказа. Например, это может быть описание самого клиента, зафиксированное в специальном пользовательском поле UF_ABOUTUSER. Это поле создается вручную в настройках сайта и доступно для каждого зарегистрированного пользователя.
Задача состоит в следующем:
Получить данные пользователя, создавшего заказ.
Прочитать значение поля UF_ABOUTUSER из его профиля.
Отобразить это значение в отдельной вкладке карточки заказа.
Реализация
Начнем с подключения нашего обработчика события. В файле /local/php_interface/init.php подключите следующий код:
use Bitrix\Main\EventManager;
// Подключаемся к событию отображения блока сведений о заказе
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('sale', '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>', // Убедимся, что VALUE задано и не пустое
'ID' => 'o_pokupatele',
];
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
$resultArray
);
}
Подробности реализации
Давайте разберемся подробнее, что здесь происходит:
Шаг 1. Обработчик события
Мы используем стандартный механизм обработки событий Битрикса, позволяющий добавлять дополнительные блоки информации прямо в административную панель заказа. Для этого применяем событие onSaleAdminOrderInfoBlockShow, срабатывающее при открытии страницы конкретного заказа.
Шаг 2. Получение данных пользователя
Через объект заказа получаем уникальный идентификатор пользователя, совершившего покупку. Затем средствами API загружаем всю информацию о пользователе и извлекаем из нее значение интересующего нас поля (UF_ABOUTUSER).
Шаг 3. Возвращаемый результат
Форматируем массив данных таким образом, чтобы система смогла успешно интегрировать наш блок в страницу просмотра заказа. Обязательно проверьте наличие значения в переменной $aboutuser, чтобы избежать ошибок типа ArgumentNullException.
Заключение
Использование подобной методики позволяет значительно расширить функциональность административной панели, делая работу сотрудников быстрее и удобнее. Такой подход помогает упростить рутинные операции, повысить эффективность бизнес-процессов и улучшить взаимодействие с клиентами.
Применяя подобные техники, вы сможете создавать собственные уникальные расширения для вашей CRM-системы на Битриксе, оптимизировать рабочие процессы и сократить временные затраты на обработку заказов.
Назад к списку