Блог Горошко Андрея 1C-Битрикс,Разработка Работа с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководство

Работа с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководство

Средний рейтинг
Еще нет оценок

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-блоки, работа с данными.

Мой рейтинг:

Добавить комментарий

Related Post

Современные компоненты Битрикс: Переходим на class.phpСовременные компоненты Битрикс: Переходим на class.php

Средний рейтинг Еще нет оценок Традиционно вся логика компонента Битрикс размещалась в файле component.php. Это простой и понятный подход, но для сложных компонентов он приводит к «лапше» из кода. Современный стандарт

Современный Frontend в Битрикс: Система JS-расширений и CJSCore::InitСовременный Frontend в Битрикс: Система JS-расширений и CJSCore::Init

Средний рейтинг 5 из 5 звезд. 1 голосов. Времена хаотичного подключения <script> и <link> тегов в header.php прошли. Современный Битрикс предлагает мощную систему управления frontend-зависимостями — JS-расширения (extensions). Что такое расширение?Это именованный пакет, который может содержать: Зачем

Создание простого компонента Битрикс с нуля: Пошаговое руководствоСоздание простого компонента Битрикс с нуля: Пошаговое руководство

Средний рейтинг Еще нет оценок Создание собственных компонентов — это основа профессиональной разработки на Битрикс. Это позволяет инкапсулировать логику, делать код переиспользуемым и следовать стандартам платформы. Давайте создадим простой компонент