Highload-блоки (HL-блоки) — это мощный инструмент 1С-Битрикс для хранения произвольных структурированных данных, не являющихся контентом в классическом понимании (как, например, новости или товары). Это могут быть справочники, логи, кастомные сущности и многое другое.
Самый современный и правильный способ работать с HL-блоками — это D7 ORM. Он предоставляет простой и унифицированный интерфейс для всех CRUD-операций (Create, Read, Update, Delete).
Шаг 1: Получение «сущности» HL-блока
Прежде чем выполнять какие-либо операции, нам нужно получить специальный объект — «скомпилированную сущность» нашего HL-блока. Это делается один раз, а затем объект можно переиспользовать.
Для этого нам понадобится ID или название (NAME) HL-блока.
use Bitrix\Main\Loader;
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
// Подключаем модуль highloadblock
Loader::includeModule("highloadblock");
// ID нашего HL-блока
$hlblockId = 2; // Замените на ID вашего HL-блока
// Получаем информацию о блоке
$hlblock = HL\HighloadBlockTable::getById($hlblockId)->fetch();
if (!$hlblock) {
die('Highload-блок не найден');
}
// Компилируем сущность
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
// Получаем класс для работы с данными
$entityDataClass = $entity->getDataClass();
Теперь переменная $entityDataClass — это наш ключ к данным. Она содержит название класса, через который мы будем выполнять все запросы, например, \SomeTable::class.
Шаг 2: Чтение данных (getList)
Метод getList работает точно так же, как и для элементов инфоблоков. Он принимает массив с параметрами select, filter, order и т.д.
Пример: Получить все записи из HL-блока, где UF_ACTIVE = 1
$result = $entityDataClass::getList([
"select" => ["ID", "UF_NAME", "UF_XML_ID"], // UF_* - это поля вашего HL-блока
"filter" => ["=UF_ACTIVE" => 1],
"order" => ["UF_SORT" => "ASC"]
]);
while ($row = $result->fetch()) {
echo "ID: {$row['ID']}, Название: {$row['UF_NAME']}<br>";
}
Шаг 3: Добавление данных (add)
Метод add принимает массив данных, где ключи — это названия полей HL-блока (UF_*). Он возвращает объект \Bitrix\Main\Entity\AddResult.
Пример: Добавить новую запись
$data = [
"UF_NAME" => "Новое значение",
"UF_XML_ID" => "new_value",
"UF_ACTIVE" => 1,
"UF_SORT" => 500
];
$result = $entityDataClass::add($data);
if ($result->isSuccess()) {
$newId = $result->getId();
echo "Запись успешно добавлена с ID: " . $newId;
} else {
// Выводим ошибки
$errors = $result->getErrorMessages();
echo "Ошибка добавления: " . implode(", ", $errors);
}
Шаг 4: Обновление данных (update)
Метод update принимает два параметра: ID записи и массив с новыми данными. Он возвращает объект \Bitrix\Main\Entity\UpdateResult.
Пример: Обновить запись с ID = 10
$idToUpdate = 10;
$data = [
"UF_NAME" => "Обновленное значение",
"UF_ACTIVE" => 0
];
$result = $entityDataClass::update($idToUpdate, $data);
if ($result->isSuccess()) {
echo "Запись с ID {$idToUpdate} успешно обновлена.";
} else {
$errors = $result->getErrorMessages();
echo "Ошибка обновления: " . implode(", ", $errors);
}
Шаг 5: Удаление данных (delete)
Метод delete принимает ID записи для удаления и возвращает \Bitrix\Main\Entity\DeleteResult.
Пример: Удалить запись с ID = 15
$idToDelete = 15;
$result = $entityDataClass::delete($idToDelete);
if ($result->isSuccess()) {
echo "Запись с ID {$idToDelete} успешно удалена.";
} else {
$errors = $result->getErrorMessages();
echo "Ошибка удаления: " . implode(", ", $errors);
}
Заключение:
Работа с Highload-блоками через D7 ORM — это просто, логично и эффективно. Процесс всегда одинаков: получить сущность, а затем вызывать методы getList, add, update или delete у ее DataClass. Такой подход делает код унифицированным и легко поддерживаемым.
Highload-блок, Битрикс, D7 ORM, HighloadBlockTable, DataManager, getList, add, update, delete, HL-блоки, работа с данными.