Блог разработчика 1С-Битрикс

Работа с Highload-блоками в Битрикс D7

В статье приведён развёрнутый материал о работе с Highload-блоками в 1С-Битрикс на D7, включающий пошаговые инструкции и примеры кода.

Работа с Highload-блоками в D7

1. Введение

Highload-блоки (HL-блоки) в 1С-Битрикс предназначены для хранения и обработки больших объёмов данных, которые не всегда подходят под стандартные инфоблоки. Их часто используют, когда необходимо создать собственную структуру данных и быстро получать к ней доступ.

D7 — это современная архитектура (ORM) от Битрикс, которая позволяет более удобно работать с данными, используя встроенные классы и методы для взаимодействия с таблицами и записями в базе данных.

2. Подключение модуля

Чтобы начать, нужно убедиться, что модуль highloadblock установлен и подключён. Обычно это делается с помощью:

<?php
use Bitrix\Main\Loader;
Loader::includeModule('highloadblock');
?>

Если модуль недоступен, его необходимо установить в административной части (Настройки → Модули).

3. Получение класса сущности Highload-блока

Чтобы работать с таблицей HL-блока через D7, нужно получить сущность и её класс данных. Предположим, что у нас есть Highload-блок с ID = $HLBLOCK_ID. Ниже пример кода:

<?php
use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Entity;

// Получаем запись о Highload-блоке
$hlblock = HighloadBlockTable::getById($HLBLOCK_ID)->fetch();

// "Компилируем" сущность на основе HL-блока
$entity = HighloadBlockTable::compileEntity($hlblock);

// Получаем класс для работы с данными
$entityClass = $entity->getDataClass();
?>

Теперь в переменной $entityClass находится класс, через который мы будем выполнять все операции: выборку, добавление, обновление, удаление и т.д.

4. Выборка данных

Для выборки данных из HL-блока используем метод getList(), передавая в него параметры выборки:

<?php
$rsData = $entityClass::getList([
    'select' => ['*'],
    'filter' => ['UF_ACTIVE' => '1'],
    'order'  => ['ID' => 'ASC'],
    'limit'  => 10
]);

while($arData = $rsData->fetch()) {
    // Обработка каждой записи
    // $arData['ID'], $arData['UF_NAME'], и т.д.
}
?>

Здесь:

  • select — массив выбираемых полей, в HL-блоках пользовательские поля имеют префикс UF_.
  • filter — массив условий выборки (аналог WHERE в SQL).
  • order — порядок сортировки.
  • limit — ограничение на количество возвращаемых записей.

5. Добавление записей

Чтобы добавить новую запись в Highload-блок, используем метод add():

<?php
$result = $entityClass::add([
    'UF_NAME' => 'Новый элемент',
    'UF_ACTIVE' => '1'
]);

if ($result->isSuccess()) {
    $newId = $result->getId();
    // Здесь $newId — это ID созданной записи
} else {
    $errors = $result->getErrorMessages();
    // Обработка ошибок
}
?>

В массиве передаём значения для всех требуемых полей (включая префикс UF_). Метод isSuccess() проверяет, успешно ли произошла операция, а getId() возвращает ID добавленной записи.

6. Обновление записей

Для обновления существующей записи используется метод update(), которому передаётся ID записи и массив новых значений:

<?php
$elementId = 10; // Пример ID записи, которую хотим обновить

$result = $entityClass::update($elementId, [
    'UF_NAME' => 'Изменённое имя',
    'UF_ACTIVE' => '0'
]);

if ($result->isSuccess()) {
    // Успешно обновлено
} else {
    $errors = $result->getErrorMessages();
    // Обработка ошибок
}
?>

7. Удаление записей

Для удаления записи по её ID вызываем метод delete():

<?php
$elementId = 10;
$result = $entityClass::delete($elementId);

if ($result->isSuccess()) {
    // Запись успешно удалена
} else {
    $errors = $result->getErrorMessages();
    // Обработка ошибок
}
?>

8. Особенности работы со свойствами (пользовательскими полями)

В Highload-блоках все настраиваемые поля начинаются с префикса UF_. Если вы создаёте новые пользовательские поля, они автоматически становятся доступными для выборки и сохранения с помощью D7 (через $entityClass), без необходимости дополнять схему вручную.

Для более «тонких» операций (например, валидаторы, событийные обработчики и т.д.) можно сгенерировать класс сущности, разместив его в папке /bitrix/modules/highloadblock/lib/ или в своём пространстве имён. Но в большинстве случаев достаточно просто использовать compileEntity.

9. Рекомендации и лучшие практики

  • Кэширование. При больших объёмах данных желательно использовать кэширование результатов выборки.
  • Индексы. Не забывайте создавать индексы в таблицах для полей, по которым выполняете фильтрацию.
  • События. Для HL-блоков доступны события OnBeforeAdd, OnAfterAdd, OnBeforeUpdate, OnAfterUpdate, OnBeforeDelete, OnAfterDelete. При необходимости вы можете подписываться на них и модифицировать данные.
  • Сложные выборки. Для сложных запросов (например, использование SQL-функций, группировок) имеет смысл использовать методы Query, доступные через ORM D7.

10. Заключение

Highload-блоки в сочетании с D7 предоставляют мощный и гибкий инструмент для работы с данными в 1С-Битрикс. Используя встроенные механизмы ORM, можно эффективно и безопасно выполнять стандартные операции (CRUD), подключать бизнес-логику и обрабатывать большие объёмы данных с высокой производительностью.

Теги:  D7, справочник


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

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

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

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

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

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

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

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