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);