Highload-блоки api, добавление, выборка и изменение

Highload-блоки api, добавление, выборка и изменение.

Поговорим о Highload блоках, которые вы можете найти в административной панели битрикса на вкладке контент. Highload блоки как правило используют для хранения большого объема данных и когда использование инфоблоков не целесообранзно. Соответственно большой объем данных вводить вручную не очень удобно, поэтому я вам и расскажу как с помощью api можно этот процесс автоматизировать.

Я столкнулся с Highload-блоками, когда решал следующую задачу. На сайте была форма в которой пользователь мог указать код и по этому коду менеджер в админке определял, что это за пользователь и делал ему бонус. У меня были поля: код, ф.и.о. телефон. Сначала я заполнил hl блок записями с кодом, а остальные два поля были пустые. Когда пользователь заполнял всю форму, вводил информацию о себе и вводил код, то я проверял есть ли вообще такой код, нет ли у этого кода уже какого нибудь пользователя, после чего изменял запись с этим кодом добавляя в незаполненные поля инфу о пользователе. Я не буду тут подробно описывать решение данной задачи, а лишь короткого расскажу как добавлять, изменять и выводить записи в hl блоках.

Создайте в админке новый hl блок в название сущности укажите Primer1, а в название таблицы в БД укажите b_primer1. Создайте у него поля UF_PROPERTY1, UF_PROPERTY2 и UF_PROPERTY3.

Процесс добавления записи в Highload-блок при помощи апи:

$hlblock_id = 1; // указываете ид вашего Highload-блока
$hlblock   = Bitrix\Highloadblock\HighloadBlockTable::getById( $hlblock_id )->fetch(); 
$entity   = Bitrix\Highloadblock\HighloadBlockTable::compileEntity( $hlblock );  
$entity_data_class = $entity->getDataClass(); 
$arMass = Array(
                'UF_PROPERTY1' => 5,
                'UF_PROPERTY2' => 123,
				'UF_PROPERTY3' => "Y"
            );
$otvet = $entity_data_class::add($arMass); 
if ($otvet->isSuccess()) {
	echo 'успешно добавлен';
} else {
	echo 'Ошибка: ' . implode(', ', $otvet->getErrors()) . "
"; }

В массиве $arMass содержатся поля hl блока и значения, которые вы присваиваете этим полям. Также может возникнуть ситуация, когда вам нужно получить определенную запись, например запись у которой поле UF_PROPERTY2 равно 9. Для этого подойдет следующий код:

$arFilter = array("UF_PROPERTY2" => 9); // ставим наш фильтр
$arSelect = array('*'); // выберутся все поля
	 
// Данные
$arData = $entity_data_class::getList(array(
		"select" => $arSelect,
		"filter" => $arFilter
));
	 
$arData = new CDBResult($arData, "b_primer1"); // b_primer1 - наша таблица
	
// цикл в котором выведутся записи у которых UF_PROPERTY2 равно 9
while($arResult = $arData->Fetch()){
	print_r($arResult);
}
Для изменения записи используйте это:
$NewInfo = array('UF_PROPERTY2' => 7); 
$entity_data_class::update(1, $NewInfo);

Этот код изменит поле UF_PROPERTY2 на 7 у записи с id равным 1.

Главное преимущество Highload-блоков перед инфоблоками это скорость, ведь при работе с инфоблоками выполняется гораздо больше запросов, а тут вы работаете с одной таблицей.

Комменатрии
Сергей 01.02.2017 15:32:12
Скажите, а как добавить в выборку количество элементов? Например нужно 3 первых...
Ответить
Иван 10.06.2017 13:37:10
Сергей, как вариант можно в самом цикле сделать ограничение, после первых трех прерывать цикл
Ответить
Я не робот
Отправить