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