Полный цикл в digital

Работа с Highload блоками в d7

В этой статье представлены методы, которые наиболее часто применяются в работе с HighloadBlock в Битрикс.

HighloadBlock это аналог инфоблока 1С Битрикс, как уверяют разработчики, он гораздо проще и легче, также эти таблицы гораздо больше подходят для высоконагруженных проектов.

В данном примере, мы будем работать с HighloadBlock через ORM в качестве массива, для HighloadBlock в ORM доступны все сущности что и для обычных инфоблоков включая объекты!

Во всех последующих примерах мы будем работать с таблицей следующей структуры:

Список всех highload блоков

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// стандартный запрос getList
$arHlData = HighloadBlockTable::getList(array(
    'select' => array("ID", "NAME"), 
    'order' => array('ID' => 'ASC'), 
    'limit' => '50', 
));
// формируем массив данных
while ($arHlbk = $arHlData->Fetch()) {
    $arrHlblocks[$arHlbk['ID']] = $arHlbk['NAME'];
}

Выборка записи

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// стандартный запрос getList
$rsData = $strEntityDataClass::getList(array(
    // необходимые для выборки поля
    'select' => array('ID', 'UF_NAME', 'UF_FILE'),
    'filter' => array('=ID' => 1)
));
// формируем массив данных
while ($arItem = $rsData->Fetch()) {
    $arItems[] = $arItem;
}

Добавление записи

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// массив значений новой записи
$arElementFields = array(
    'UF_NAME' => "Тест",
    'UF_FILE' => "",
    'UF_LINK' => "",
    'UF_SORT' => 100,
    'UF_DEF' => "",
    'UF_XML_ID' => "test",
);
// добавляем данные
$obResult = $strEntityDataClass::add($arElementFields);
// можем сразу полочить информацию о добавленом поле
$ID = $obResult->getID();
$bSuccess = $obResult->isSuccess();

Изменение записи

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// поля которые нужно обновить
$fields = array(
    'UF_NAME' => "Фиолетовый Тест",
);
// 1, это id обновляемой записи
$result = $strEntityDataClass::update(1, $fields);

Удаление записи

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// 1, это id удаляемой записи
$result = $strEntityDataClass::Delete(1);

Обращение к HighloadBlock по имени таблицы БД

// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока по названию таблицы
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(
    array(
        "filter" => array(
            '=TABLE_NAME' => 'b_hlbd_kassovoeoborudovanie'
        )
    )
)->fetch();
// инициализируем класс сущности по названию таблицы
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
// обращаемся к DataManager
$entity_data_class = $entity->getDataClass();
// стандартный запрос getList
$res = $entity_data_class::getList(array(
    'select' => array('ID', 'UF_NAME', 'UF_FILE'),
    'filter' => array('=ID' => 1)
));
// формируем массив данных
while ($arItem = $res->Fetch()) {
    $arItems[] = $arItem;
}

Работа со свойствами

Заметка подойдет для получения значений любого UF поля, не обязательно связанного с HighloadBlock, но и разделов.

Множественное свойство список

Что бы получить значения со всей информацией о выбранных пунктах списка, множественного поля, используем CUserFieldEnum::GetList:

// включаем метод
$obEnum = new \CUserFieldEnum;
// делаем запрос, передав ID множественного свойства UF
$rsEnum = $obEnum->GetList(
    array(),
    array("ID" => ID_множественного_свойства)
);
// получаем ответ
while ($arEnum = $rsEnum->Fetch()) {
    pp($arEnum);
}

Файл

CFile::GetFileArray(ID_файла)
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг