Шпаргалка по работе с highload-инфоблоками
Данный пост - маленькая шпаргалка для работы с highload-инфоблоками.
Подготовка к работе
Для работы с highload-ами, нужно подключить подключить модуль highloadblock к сущности highload:
// подключаем пространство имен класса HighloadBlockTable и даём ему псевдоним HLBT для удобной работы use Bitrix\Highloadblock\HighloadBlockTable as HLBT; // ID highloadblock'a const EXP_HL_BLOCK_ID = 1; //подключаем модуль highloadblock CModule::IncludeModule('highloadblock'); //Функция получения экземпляра класса: function GetEntityDataClass($iHlBlockId) { if (empty($iHlBlockId) || $iHlBlockId < 1) { return false; } $hlblock = HLBT::getById($iHlBlockId)->fetch(); $entity = HLBT::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); return $entity_data_class; }
Данная функция получает сущность хайлоадов для дальнейшей работы.
Получение названий полей
use Bitrix\Highloadblock\HighloadBlockTable as HLBT; const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $hlblock = HLBT::getById(EXP_HL_BLOCK_ID)->fetch(); $entity = HLBT::compileEntity($hlblock); var_dump($entity->getFields());
Получаем массив, где ключи это поля highload-блока, а значения — объекты, соответствующие типу поля (строка — Bitrix\Main\Entity\StringField, число — Bitrix\Main\Entity\IntegerField).
Тип можно получить следующим образом(ID имя поля):
var_dump(get_class($entity->getFields()['ID']));
Получить элементы highload-инфоблока
const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $entity_data_class = GetEntityDataClass(EXP_HL_BLOCK_ID); $rsData = $entity_data_class::getList(array( 'select' => array('*') )); while($el = $rsData->fetch()){ print_r($el); }
Количество элементов highload-инфоблока
const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $entity_data_class = GetEntityDataClass(EXP_HL_BLOCK_ID); var_dump($entity_data_class::getCount());
Добавить новый элемент в highload-инфоблок
const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $entity_data_class = GetEntityDataClass(EXP_HL_BLOCK_ID); $result = $entity_data_class::add(array( 'UF_NAME' => 'Желтый', 'UF_CODE' => 'YELLOW', 'UF_VALUE' => '#ffff00', 'UF_ACTIVE' => '1' ));
Удалить новый элемент в highload-инфоблок
const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $id = 9; $entity_data_class = GetEntityDataClass(EXP_HL_BLOCK_ID); $result = $entity_data_class::delete($id);
Обновить новый элемент в highload-инфоблок
const EXP_HL_BLOCK_ID = 1; CModule::IncludeModule('highloadblock'); $id = 10; $entity_data_class = GetEntityDataClass(MY_HL_BLOCK_ID); $result = $entity_data_class::update($id, array( 'UF_NAME' => 'Фиолетовый', 'UF_CODE' => 'PURPLE', 'UF_VALUE' => '#5A009D', 'UF_ACTIVE' => '1' ));
В качестве дополнения, рекомендую ознакомиться с оффициальной документацией здесь и здесь