Добавление в новый Highload блок новых полей с помощью API Bitrix (программно)

Нашел статью Создание HL-блока с помощью API Bitrix. Там есть следующий код (см. конец статьи)

$arSavedFieldsRes = Array();
foreach($arCartFields as $arCartField){
    $obUserField  = new CUserTypeEntity;
    $ID = $obUserField->Add($arCartField);
    $arSavedFieldsRes[] = $ID;
}

Это код окончательного создания highload блока. Возник вопрос:

" В коде выше была заведена переменная $result

//создание HL-блока для корзин покупателей
$result = HL\HighloadBlockTable::add(array(
    'NAME' => 'VisitorCart3',
    'TABLE_NAME' => 'visitor_cart3', 
));

if ($result->isSuccess()) {
    $id = $result->getId();
    foreach($arLangs as $lang_key => $lang_val){
        HL\HighloadBlockLangTable::add(array(
            'ID' => $id,
            'LID' => $lang_key,
            'NAME' => $lang_val
        ));
    }
} else {
    $errors = $result->getErrorMessages();
    var_dump($errors);  
}

.

  1. Каким образом переменная $result связана с $arSavedFieldsRes? Каким образом сохранение полей в этой переменной влияет на содержимое highload блока, сохраненного в переменной $result?

  2. Может быть вместо нее нужно использовать $result?"

Приведите точный правильный код создания highload блока и добавления в него новых полей с помощью API Bitrix.


Ответы (1 шт):

Автор решения: Виктор Карев

Функция HL\HighloadBlockTable::add() возвращает объект класса AddResult. Этот объект описывает, успешно или нет завершилась операция добавления записи в таблицу. Из него также можно получить индекс добавленной записи.

Смысл её использования в том, что значала записываем строку в основную таблицу (список HL-блоков), и если строка добавлена успешно, записываем значения в таблицу их названий на разных языках.

Добавление поля в таблицу:

                $arFields = [
                    'ENTITY_ID' => 'HLBLOCK_' . $tableID,
                    'SHOW_FILTER' => 'N',
                    'SHOW_IN_LIST' => 'Y',
                    'EDIT_IN_LIST' => 'Y',
                    'USER_TYPE_ID' => 'string',
                    'FIELD_NAME' => 'UF_NAME',
                ];
$obUserTypeEntity = new CUserTypeEntity();
$fieldID = $obUserTypeEntity->Add($arFields);
→ Ссылка