Шпаргалка по работе с 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 MY_HL_BLOCK_ID = 1;
CModule::IncludeModule('highloadblock');
$entity_data_class = GetEntityDataClass(MY_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'
));
В качестве дополнения, рекомендую ознакомиться с оффициальной документацией здесь и здесь