В 14-ой версии Битрикса появился новый функционал - highload инфоблоки. Зачитать что это, можно тут. Далее примеры кода как с этим все работать.
1. Зная цифровой ИД сущности highload-блока ($hl_entity_id) подготавливаем сущность к работе:
Далее все операции производим с участием $hl_data_class.
2. Добавление новой записи в hl-блок:
Для добавления значения типа Да/Нет используется true/false (а не Y/N как можно подумать)
Для получения ИД новой добавленой записи есть метод getId():
3. Обновление записи происходит аналогично, первым параметром передаем ИД ($id) обновляемой записи:
4. С удалением записи я лично пока не столкнулся, но, вероятно, это происходит как-то так:
5. "Отлов" ошибок реализуется в простейшем случае так:
6. Выборка данных реализуется методом getList():
Количество возвращаемых записей можно получить методом getSelectedRowsCount():
Для получения количества всех записей можно воспользоваться методом getCount(), пока что (в версии 14.0.7) он не принимает никаких аргументов и возвращает общее число записей в таблице
7. Дату в поле типа Время пока что надо передавать так:
Это пока всё, чем могу поделиться касаемо работы с highload-блоками.
Если будут вопросы - велкам в коменты.
1. Зная цифровой ИД сущности highload-блока ($hl_entity_id) подготавливаем сущность к работе:
\CModule::IncludeModule('highloadblock');
$hl_data = \Bitrix\Highloadblock\HighloadBlockTable::getById($hl_entity_id)->fetch();
$hl_entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hl_data);
$hl_data_class = $hl_data['NAME'] . 'Table';
Далее все операции производим с участием $hl_data_class.
2. Добавление новой записи в hl-блок:
$hl_data_class::add(array(
'UF_FIELD_1' => 'value_1',
'UF_FIELD_2' => 'value_2'
));
Для добавления значения типа Да/Нет используется true/false (а не Y/N как можно подумать)
$hl_data_class::add(array(
'UF_FIELD_1' => 'value_1',
'UF_FIELD_ACTIVE' => true
));
Для получения ИД новой добавленой записи есть метод getId():
$res = $hl_data_class::add(array(
'UF_FIELD_1' => 'value_1',
'UF_FIELD_ACTIVE' => true
));
$new_id = $res->getId();
3. Обновление записи происходит аналогично, первым параметром передаем ИД ($id) обновляемой записи:
$hl_data_class::update($id, array(
'UF_FIELD_1' => 'new_value_1',
'UF_FIELD_2' => 'new_value_2'
));
4. С удалением записи я лично пока не столкнулся, но, вероятно, это происходит как-то так:
$hl_data_class::delete($id);
5. "Отлов" ошибок реализуется в простейшем случае так:
// инициализируем сущность
// ......
$res = $hl_data_class::add($some_data_array);
if (!$res->isSuccess()) {
$err_list = '';
foreach ($res->getError() as $error)
$err_list .= $error->getMessage() . '; ';
}
6. Выборка данных реализуется методом getList():
// инициализируем сущность
// ......
$res = $hl_data_class::getList(array(
// ограничиваем выборку условиями
'filter' => array(
'UF_FIELD_1' => 'value',
'UF_FIELD_2' => 14,
'UF_FIELD_ACTIVE' => true,
),
// ограничиваем поля выборки
'select' => array(
'ID', 'UF_FIELD_1', 'UF_FIELD_2'
),
// ограничиваем количество возвращаемых записей
'limit' => 5,
// сортируем в нужном порядке
'order' => array(
'UF_FIELD_2' => 'asc'
),
));
while ($row = $res->fetch()) {
// пробегаем по результату выборки
}
Количество возвращаемых записей можно получить методом getSelectedRowsCount():
echo $res->getSelectedRowsCount();
Для получения количества всех записей можно воспользоваться методом getCount(), пока что (в версии 14.0.7) он не принимает никаких аргументов и возвращает общее число записей в таблице
echo $res = $hl_data_class::getCount();
7. Дату в поле типа Время пока что надо передавать так:
$res = $hl_data_class::add(array(
'UF_FIELD_DATETIME' => date('d.m.Y H:i:s'),
'UF_FIELD_ACTIVE' => true
));
Это пока всё, чем могу поделиться касаемо работы с highload-блоками.
Если будут вопросы - велкам в коменты.
Как изменить сортировку записей на странице с компонентом bitrix:highloadblock.list?
ОтветитьУдалитькогда я в явном виде передаю через $_GET ?sort_type=ASC, то сортировка приобретает нормальный вид, иначе компонент сортирует записи по убыванию=(
ОтветитьУдалитьСложно сказать не видя компонент, но вероятно там в настройках компонента должен быть параметр отвечающий за сортировку
УдалитьПосмотрел в компонент, настройки нет, только определение указан ли $_GET['sort_type']. Но в принципе этого достаточно, можно перед вызовом компонента установить $_GET['sort_type'] = 'ASC'. Костыль, но что делать.
УдалитьПару слов про новый функционал , highload инфоблоки работают "шустрее", вот пример и измерения
ОтветитьУдалить$connection = Bitrix\Main\Application::getConnection();
$connection ->query('SET @rank=0');
$siblingsElementIterator = $connection->query(
("SELECT
`iblock_element`.`ID` AS `ID`,
`iblock_element`.`NAME` AS `NAME`,
`iblock_element`.`CODE` AS `CODE`,
`iblock_element`.`DETAIL_PICTURE` AS `DETAIL_PICTURE`,
`iblock_element`.`IBLOCK_SECTION_ID` AS `IBLOCK_SECTION_ID`
FROM `b_iblock_element` `iblock_element`
WHERE `iblock_element`.`IBLOCK_ID` = 1
AND `iblock_element`.`ACTIVE` = 'Y'
ORDER BY `iblock_element`.`ID` DESC")
);
$siblingsElements = array();
while ($siblingsElement = $siblingsElementIterator ->fetch()) {
$siblingsElements[] = $siblingsElement;
}
Время общее выполнения: 0.00331 попугаев
global $DB; $DB->Query (тожесамое)
Время общее выполнения: 0.00642 попугаев
Вы просто выполнили здесь прямой запрос к БД. Где здесь работа с хайлоадблоками?
УдалитьКак в highloadblock реализовать сложный фильтр с ИЛИ?
ОтветитьУдалитьписал в статейке про это http://thisis-blog.ru/elementi-highload-bloka/#compl
Удалить