Pull to refresh

Highload инфоблоки и работа с ними

Reading time2 min
Views56K
Доброго времени суток.

Сегодня поговорим о Highload инфоблоках. Точнее как с ними работать. Если вы посмотрите в интернете, то везде есть как с них взять информацию, но как наоборот записать-изменить-удалить — этого я не нашел (наверное просто я плохо искал), но мне очень надо было.
Поэтому я обратился к ЛайфАПИ и раскопал кое-что. Начнем по порядку.
Как вы наверное заметили, эти инфоблоки содержат пользовательские поля. Т.е. каждое поле начинается с UF. Но я не буду разжевывать, т.к. кто кодит на битриксе, тот знает это.


перед какими-либо действиями нужно подключить необходимый модуль:
CModule::IncludeModule("highloadblock"); 


Потом идет самое интересное.

Делаем настройки подключения:

use Bitrix\Highloadblock as HL; 
use Bitrix\Main\Entity; 


Это своего вида символические ссылки (кто работал с многосайтовостью тот поймет). Для остальных — подключайте не в функциях, не в условиях и т.д. (Можно подключать в компонентах и result_modifier.php).

Это нужно подключить до всех условий, это не работает в подключении функции и т.д.

Далее нужно написать следующий код (выбираем необходимые поля и подключаем функции классов):

$hlbl = 1; - "ID  Highload инфоблока" (я его выношу в параметры компонента обычно).
$hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch(); 
// get entity 
$entity = HL\HighloadBlockTable::compileEntity($hlblock); 
$entity_data_class = $entity->getDataClass(); 


Далее мы можем работать непосредственно с Highload инфоблоком:

Добавление данных:
за добавление данных отвечает как и всегда у них функция:
$result = $entity_data_class::add($data);

Пояснять тут думаю не стоит много: класс-функция.
дело в том, что мы не знаем как точно отдаются поля в массив $data. Поясню. Это, как мы уже видели «Пользовательские поля», и передается код поля (UF_*******).
т.е.
data = array(
"UF_DATE_FROM"=>'$datefrom',
"UF_DATE_TO"=>'$dateto',
);


Ну и после этого добавляем уже вышестоящей функцией.

это выбрать ID после добавления (на случай если надо проверить произошло ли добавление).
$ID = $result->getId(); 


Удаление данных:

для удаления данных просто необходимо знать ID элемента. Все просто как и обычно:
$entity_data_class::Delete($ID); 


Изменение данных:

$result = $entity_data_class::update($ID, $data); 

Особенность:
изменение (можно передавать только один параметр, который надо изменить). Т.е. можно передать только одно свойство, и оно изменится. Для простых инфоблоков для этого используется отдельная функция.
Ну и $ID — это ID элемента Highload инфоблока.

ЗЫ:
Для изменения пользовательского свойства типа Y/N мы должны отдавать Y/0, а не Y/N как обычно. (это на моем опыте).

выборку данных из этих инфоблоков вы найдете в компонентах:
highloadblock.list
highloadblock.view


Если время будет — напишу про одну функцию битрикса, которая по массиву элементов выбирает торговые предложения с ценами и всем их функционалом. (Хотя можете посмотреть через живое апи).

Статья написана для ознакомления. Если кто-то знает больше — пишите в комментариях.

С ув., кодер.
Tags:
Hubs:
Total votes 21: ↑4 and ↓17-13
Comments7

Articles