Поговорим о 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-блоков перед инфоблоками это скорость, ведь при работе с инфоблоками выполняется гораздо больше запросов, а тут вы работаете с одной таблицей.