...

пятница, 27 декабря 2013 г.

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

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

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

Поэтому я обратился к ЛайфАПИ и раскопал кое-что. Начнем по порядку.

Как вы наверное заметили, эти инфоблоки содержат пользовательские поля. Т.е. каждое поле начинается с UF. Но я не буду разжевывать, т.к. кто кодит на битриксе, тот знает это.




перед какими-либо действиями нужно подключить необходимый модуль:

CModule::IncludeModule(«highloadblock»);


Потом идет самое интересное. Подключаем:

use Bitrix\Highloadblock as HL;

use Bitrix\Main\Entity;


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


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


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


$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 как обычно. (это на моем опыте).


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


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


С ув., кодер.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий