Highload инфоблоки в 1c-bitrix.

Highload инфоблоки в 1c-bitrix.

Записки программиста

Привет, битриксоиды=)

Если вы зашли в данную заметку, вы наверняка уже слышали про новый модуль битрикса 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);	//удаляем элемент
				

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