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

в 19:31, , рубрики: 1С-Битрикс, highload, битрикс, инфоблоки, метки: , ,

Доброго времени суток.

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


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

Потом идет самое интересное. Подключаем:
use BitrixHighloadblock as HL;
use BitrixMainEntity;

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

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

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

$hlbl = 1; — «ID Highload инфоблока» (я его выношу в параметры компонента обычно).
$hlblock = HLHighloadBlockTable::getById($hlbl)->fetch();
// get entity
$entity = HLHighloadBlockTable::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

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

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

С ув., кодер.

Автор: aice19

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js