Привет, битриксоиды=)
Если вы зашли в данную заметку, вы наверняка уже слышали про новый модуль битрикса highload инфоблоки. Они рассчитаны на работы с данными инфоблоков в условиях большой нагрузки на серверы и способны хранить большой объем информации, не теряя скорость работы сервера. Инфоблоки ограничены в интерфейсе и имеют более продуманную систему хранения данных, этим им объясняется повышение производительности и работы с элементами highload инфоблоков.
В этой заметке хочется показать код подключения модуля и основных действий над элементами highload инфоблоков, не рассматривая создание инфоблоков и элементов в интерфейсе битрикса.
В первую очередь подключаем модуль highload инфоблоков и задаем псевдонимы для работы с модулем:
CModule::IncludeModule('highloadblock'); //модуль highload инфоблоков use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity;
Причем две последние строчки необходимо прописывать "в корне" кода - вне различных функций, условий. Такая вот принципиальность.
Далее стандартно, как и с классами для работы с обычными инфоблоками: методы и классы для доступа к данными highload инфоблока (в данном случае инфоблок с id = 3):
$hlblock_requests=HL\HighloadBlockTable::getById(3)->fetch();//requests $entity_requests=HL\HighloadBlockTable::compileEntity($hlblock_requests); $entity_requests_data_class = $entity_requests->getDataClass();
Следующий код достает элементы highload инфоблока. Здесь задается список полей, которые необходимо вывести, и фильтр (элементы с именами "Александр"):
$main_query_requests = new Entity\Query($entity_requests_data_class); $main_query_requests->setSelect(array('ID','UF_NAME')); $main_query_requests->setFilter( array( 'UF_NAME'=>'Александр', ) ); $result_requests = $main_query_requests->exec(); $result_requests = new CDBResult($result_requests); while ($row_requests=$result_requests->Fetch()) { $requests[] = $row_requests; //массив выбранных элементов }
В результате в массиве окажутся все элементы инфоблока, поле "UF_NAME" которых равен "Александр".
Далее рассмотрим код, который позволяет добавлять элементы в highload инфоблок с помощью метода add. В массиве указываются поля с их значениями:
$result = $entity_requests_data_class::add(array( //добавляем элемент 'UF_NAME'=>'Николай', 'UF_PROJECT'=>'seo', 'UF_ACTIVE'=>1 ));
Здесь ничего сложного, добавляется элемент с данными значениями.
Метод update позволяет изменить значения элемента инфоблока. Вместо $id указывайте id элемента, значения которого необходимо изменить:
$result = $entity_requests_data_class::update( //обновляем значения элемента $id, //id элемента array( 'UF_GROUP'=>$id_group, 'UF_URL'=>$id_url ) );
И напоследок метод удаления элемента:
$result = $entity_requests_data_class::delete($id); //удаляем элемент
Поработав с такими инфоблоками, действительно ощутил большую скорость обработки данных, запись, выборка и т.д. Единственное, нехватает интерфейса для работы в админке, а особенно фильтр выборки элементов в админке. Будем надеяться, что разработчики в ближайшем будущем поработают над этим.