Highload инфоблоки
16.02.2014
Так как официальной документации пока нет, а разбираться с работой нового функционала надо, я полез в исходные коды модуля, чтобы понять что да как. Хочется думать что в будущем разработчики битрикс упростят работу с Highload инфоблоками, потому что сейчас не совсем удобно.
Шаг 1. Объект - сущность инфоблока
Все манипуляции с элементами Highload инфоблока начинаются с объекта - сущности инфоблока.
Для начала нужно получить описательный массив инфоблока в виде:
Array ( [ID] => 4 [NAME] => LANG [TABLE_NAME] => lang [FIELDS_COUNT] => 3 )
Для этого:
CModule::IncludeModule('highloadblock');
$rsData = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('NAME'=>'LANG')));
if ( !($arData = $rsData->fetch()) ){
echo 'Инфоблок не найден';
}
Если не указывать параметр в функции getList - то функция вернет информацию о всех инфоблоках
Теперь получим объект - сущность.
$Entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arData);
Получение элементов
//Создадим объект - запрос
$Query = new \Bitrix\Main\Entity\Query($Entity);
//Зададим параметры запроса, любой параметр можно опустить
$Query->setSelect(array('*'));
$Query->setFilter(array('ID'=> array(2,12,6)));
$Query->setOrder(array('UF_SORT' => 'ASC'));
//Выполним запрос
$result = $Query->exec();
//Получаем результат по привычной схеме
$result = new CDBResult($result);
$arLang = array();
while ($row = $result->Fetch()){
$arLang[$row['UF_KEY']] = $row;
}
Добавление / обновление элемента
//Создадим объект DataClass
$DataClass = $Entity->getDataClass();
//Зададим поля нового или обновляемого элемента. Если указать не все поля,
//то неуказанные поля останутся без изменения
$arBxData = array(
'UF_KEY' => 'newKey',
'UF_NAME' => 'newName',
'UF_SORT' => 500,
);
if ($arParams['ID']){
//Обновим элемент
$result = $DataClass::update($arParams['ID'], $arBxData);
if(!$result->isSuccess()){ //произошла ошибка
echo implode(', ', $result->getErrorMessages()); //выведем ошибки
}
} else {
//Добавим новый элемент
$result = $DataClass::add($arBxData);
if(!$result->isSuccess()){
echo implode(', ', $result->getErrorMessages()); //выведем ошибки
}
echo 'NewId:'.$result->getId();//Id нового элемента
}
Удаление элемента
//Создадим объект DataClass
$DataClass = $Entity->getDataClass();
$result = $DataClass::delete($arParams['ID']);
if(!$result->isSuccess()){ //произошла ошибка
echo implode(', ', $result->getErrorMessages()); //выведем ошибки
} else {
echo 'ok';
}
Комментарии:
Алексей
06.06.2014 11:46:25
xxx
17.06.2014 15:44:08
Максим
06.07.2014 18:47:01
mariva
31.08.2014 20:29:41
Артём
04.09.2014 12:05:28
Александр
24.12.2014 11:35:38
Артем
12.06.2015 12:08:15
Михаил
25.06.2015 20:13:51
Лаки
24.11.2015 14:05:31
andyzee
12.01.2016 09:30:59
Матвей
07.04.2016 06:54:25
здесь UF_CITY - это поле типа ссылка на другой хайлоад, что добавляет виртуальное поле UF_CITY_REF. через которое мы можем получать свойства из другой таблицы.
Инфоблоки к сожалению через рантайм приходится делать. А для свойств инфоблоков приходится новые классы заводить.
Александр
22.06.2016 15:30:39
Оставить комментарий: