В этой статье я расскажу вам, как работать с HL-блоками в 1С-Битрикс, используя API Bitrix.
HL-блоки (Highload-блоки) — это специальные сущности, которые позволяют хранить и обрабатывать большие объемы данных в Битрикс. Они отличаются от обычных инфоблоков тем, что не используют стандартные таблицы Битрикс, а создают свои собственные в базе данных.
Это дает ряд преимуществ, таких как:
— Более высокая производительность и масштабируемость
— Более гибкая настройка полей и индексов
— Возможность использовать любые типы данных, включая пользовательские
— Возможность интеграции с D7-орм и другими компонентами Битрикс
Для работы с HL-блоками в 1С-Битрикс необходимо выполнить следующие шаги:
1. Создать HL-блок в административной панели Битрикс.
Для этого нужно перейти в раздел «Highload-блоки» и нажать кнопку «Добавить highload-блок». Затем нужно указать название, символьный код и название таблицы для HL-блока.
После создания HL-блока можно добавить необходимые поля, выбрав типы данных и параметры для каждого поля.
2. Подключить модуль highloadblock в своем коде.
Для этого нужно использовать функцию CModule::IncludeModule(«highloadblock»).
Эта функция загружает необходимые классы и функции для работы с HL-блоками.
3. Получить объект HL-блока по его ID или символьному коду.
Для этого нужно использовать статический метод Bitrix\Highloadblock\HighloadBlockTable::getById($id) или Bitrix\Highloadblock\HighloadBlockTable::getList([«filter» => [«NAME» => $code]]). Эти методы возвращают объект класса Bitrix\Main\Entity\DataManager, который представляет собой HL-блок и содержит методы для работы с его данными.
4. Выполнить необходимые операции с данными HL-блока, используя методы объекта Bitrix\Main\Entity\DataManager.
Например, для добавления записи в HL-блок можно использовать метод add($data), где $data — массив с данными для полей HL-блока.
Для получения записей из HL-блока можно использовать метод getList($parameters), где $parameters — массив с параметрами выборки, такими как фильтр, сортировка, пагинация и т.д. Для обновления или удаления записей из HL-блока можно использовать методы update($id, $data) или delete($id), где $id — идентификатор записи, а $data — массив с новыми данными для полей HL-блока.
Пример кода 1 для работы с HL-блоком:
// Подключаем модуль highloadblock
CModule::IncludeModule("highloadblock");
// Получаем объект HL-блока по символьному коду
$hlblock = Bitrix\Highloadblock\HighloadBlockTable::getList(["filter" => ["NAME" => "MyHLBlock"]])->fetchObject();
// Добавляем запись в HL-блок
$result = $hlblock->add([
"UF_NAME" => "Иван",
"UF_AGE" => 25,
"UF_GENDER" => "М"
]);
// Проверяем результат добавления
if ($result->isSuccess()) {
echo "Запись успешно добавлена";
} else {
echo "Ошибка добавления: " . implode(", ", $result->getErrorMessages());
}
// Получаем записи из HL-блока с фильтром и сортировкой
$records = $hlblock->getList([
"filter" => ["UF_GENDER" => "М"],
"order" => ["UF_AGE" => "DESC"],
"select" => ["ID", "UF_NAME", "UF_AGE"]
]);
// Выводим записи на экран
while ($record = $records->fetch()) {
echo "ID: {$record["ID"]}, Имя: {$record["UF_NAME"]}, Возраст: {$record["UF_AGE"]}<br>";
}
// Обновляем запись в HL-блоке по ID
$result = $hlblock->update(1, [
"UF_NAME" => "Петр",
"UF_AGE" => 26
]);
// Проверяем результат обновления
if ($result->isSuccess()) {
echo "Запись успешно обновлена";
} else {
echo "Ошибка обновления: " . implode(", ", $result->getErrorMessages());
}
// Удаляем запись из HL-блока по ID
$result = $hlblock->delete(2);
// Проверяем результат удаления
if ($result->isSuccess()) {
echo "Запись успешно удалена";
} else {
echo "Ошибка удаления: " . implode(", ", $result->getErrorMessages());
}
Пример кода 2 для работы с HL-блоком:
// Подключаем модуль highloadblock
CModule::IncludeModule('highloadblock');
// Получаем экземпляр класса CIBlockElement
$hlblock = Bitrix\Highloadblock\HighloadBlockTable::getById(5)->fetch();
$entity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
// Создаем массив с данными пользователя
$userData = array(
'UF_NAME' => 'Иван',
'UF_LAST_NAME' => 'Иванов',
'UF_EMAIL' => 'ivanov@mail.ru',
'UF_PHONE' => '+7 (999) 999-99-99'
);
// Добавляем элемент в HL-блок
$result = $entity_data_class::add($userData);
if ($result->isSuccess()) {
echo 'Пользователь успешно добавлен';
} else {
echo 'Ошибка добавления пользователя: ' . implode(', ', $result->getErrorMessages());
}