Доброго времени суток.
Сегодня поговорим о 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