Highload-блоки появились в битрикс начиная с версии 14.0. Они ориентированы на создание более быстрых справочников, по сравнению с традиционными инфоблоками, которые были известны ранее пользователям битрикс. Highload-блоки реализованы в виде отдельного модуля, на новом ядре D7, структура данных этого модуля предполагает возможность использования в нагруженных проектах.
На самом деле между инфоблоками и highload-блоками нет ничего общего, а это значит, что средствами стандартного функционала администраторской части нет возможности перенести данные из инфоблоков в новую структуру. Однако при необходимости можно реализовать это, используя API битрикса, предварительно создав необходимую структуру для данных в highload.
Рассмотрим простые примеры, которые помогут вам начать использовать их в своих проектах.
Первое что следует сделать – это подключить модуль hightload, делается это традиционным методом, так:
CModule::IncludeModule("highloadblock");
Далее нам следует задать highload блок, с которым мы будем работать
$hlblock_id = 1; $hlblock = Bitrix\Highloadblock\HighloadBlockTable::getById($hlblock_id)->fetch(); $entity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass();
После этого мы можем работать с данными, добавлять новые, запрашивать, обновлять и удалять. В качестве первого примера мы попробуем добавить данные в highload-блок таким вот образом:
// массив полей для добавления в hightload-блок $arAdd = array( 'UF_SOURCE_ELEM_ID' => 12345, 'UF_DEST_ELEM_ID' => 54321, 'UF_SOURCE_URL' => '/catalog/avto/', 'UF_DEST_URL' => '/avto/tovary/' ); $result = $entity_data_class::add($arAdd); if ($result->isSuccess()){ echo 'Запись добавлена успешно! ID записи: '. $result->getId(); } else { echo 'Не удалось добавить запись...'; }
Далее попробуем запросить некую запись, для этого есть метод getList, название которого возможно вам уже известно, и оно говорит само за себя. Данный метод выбирает поля из highload-блоков, согласно заданным параметрам. Рассмотрим следующий пример, попробуем запросить некоторые данные.
$rsData = $entity_data_class::getList( array( "select" => array("*"), "order" => array("ID" => "ASC"), "filter" => array('UF_SOURCE_URL' => $pageUrl) ) ); if ($arData = $rsData -> Fetch()){ echo '<pre>'; print_r ($arData); echo '</pre>'; }
Таким образом, мы передаем методу getList три параметра, первый «select» – указываем поля, которые следует выбрать (* — означает все поля), второй «order» — задает порядок сортировки, третий «filter» — фильтр, согласно которому будут отобраны данные.
Теперь попробуем обновить данные одной из записей в highload-блоке.
// массив полей для обновления $arUpd = array( 'UF_SOURCE_URL' => '/catalog/tv/', 'UF_DEST_URL' => '/televizory/' ); $result = $entity_data_class::update($ID, $arUpd);
Обновляется запись в highload блоках методом update, который принимает два параметра: $ID – ID записи, $arUpd – массив полей, которые следует изменить.
Ну и на конец, попробуем удалить запись из hightload. Делается это ещё проще. Чтобы удалить запись, нам достаточно знать её ID, после чего мы передаем его методу Delete.
$entity_data_class::Delete($ID);