Редактировать

Создание типа инфоблока

<?
function ibTypeAdd($ibTypeCode, $hasSections = 'Y', $sort = 500, $lang = 'ru') {
    $ibtCode = strtolower($ibTypeCode);
    $dbIbt = CIBlockType::GetByID($ibtCode);
    $arIbt = $dbIbt->GetNext();

    if($arIbt) {
        return false;
    }

    $arFields = [
        'ID' => $ibtCode,
        'SECTIONS' => $hasSections,
        'IN_RSS' => 'N',
        'SORT' => $sort,
        'LANG' => $lang,
    ];

    $obBlocktype = new \CIBlockType();
    $db->StartTransaction();
    $res = $obBlocktype->Add($arFields);

    if(!$res) {
        $db->Rollback();
        
        return false;
    }
    
    $db->Commit();
    
    return true;
}

Удаление типа инфоблока

<?
function ibTypeDelete($ibTypeCode) {
    $dbIbt = CIBlockType::GetByID($ibTypeCode);
    $arIbt = $dbIbt->GetNext();

    if(!$arIbt) {
        return false;
    }

    $db->StartTransaction();
    if(!CIBlockType::Delete($ibTypeCode)) {
        $db->Rollback();
        return false;
    }
    
    $db->Commit();
        
    return true;
}

Создание инфоблока

<?
function ibAdd($ibName, $ibCode, $ibTypeCode, $arProps) {

	$ib = new CIBlock();
        $arFields = Array(
        "ACTIVE" => 'Y',
        "NAME" => $ibName,
        "CODE" => $ibCode,
        "IBLOCK_TYPE_ID" => $ibTypeCode,
        "SITE_ID" => [SITE_ID],
        "LID" => SITE_ID,
        "SORT" => 1000,
        "WORKFLOW" => 'N',
        //"GROUP_ID" => Array("2"=>"D", "3"=>"R")
    );

    $ibId = $ib->Add($arFields);

    if ($ibId <= 0) {
    	// \Bitrix\Main\Diag\Debug::dump($ib->LAST_ERROR);
        // die();
    	return false;
    }
    
    // добавляем свойства
    foreach ($arProps as $arProp) {

        $dbProperties = CIBlockProperty::GetList([], ["IBLOCK_ID" => $ibId, 'CODE' => $arProp['CODE']]);
        if ($dbProperties->SelectedRowsCount() > 0) {
            continue;
        }

        $ibp = new CIBlockProperty;

        $arFields = Array(
            "NAME" => $arProp['NAME'],
            "ACTIVE" => "Y",
            "SORT" => 100, // Сортировка
            "CODE" => $arProp['CODE'],
            "PROPERTY_TYPE" => "S", // Строка
            "ROW_COUNT" => 1, // Количество строк
            "COL_COUNT" => 60, // Количество столбцов
            "IBLOCK_ID" => $ibId
        );
        $propId = $ibp->Add($arFields);

        if (!$propId) {
            // \Bitrix\Main\Diag\Debug::dump($ibp->LAST_ERROR);
            // die();
            continue;
        }
    }

    return false;

}

Удаление инфоблока

<?
function ibDelete($ibCode, $ibTypeCode) {
    $arOrder = [];
    $arFilter = ['TYPE' => $ibTypeCode, 'CODE' => $ibCode];
    $dbIBList = CIBlock::GetList($arOrder, $arFilter);

    if ($dbIBList->SelectedRowsCount() != 1) {
        return false;
    }
    
    $arIBList = $dbIBList->GetNext();

    $db->StartTransaction();
    if (!CIBlock::Delete($arIBList['ID'])) {
        $db->Rollback();
        return false;
    }
    
    $db->Commit();
    
    return true;
}

Проверка наличия свойства в инфоблоке

<?
function isPropExists($ibId, $propCode) {
    $dbProperties = \CIBlockProperty::GetList([], ["IBLOCK_ID" => $ibId, 'CODE' => $propCode]);

    if ($dbProperties->SelectedRowsCount() > 0) {
        return true;
    }

    return false;
}

Добавление свойства в инфоблок

<?
function addIBlockProp($ibId, $propCode) {
    
    $ibp = new \CIBlockProperty();

    $arFields = Array(
        "NAME" => $propCode,
        "ACTIVE" => "Y",
        "SORT" => 100, // Сортировка
        "CODE" => $propCode,
        "PROPERTY_TYPE" => "S", // Строка
        "ROW_COUNT" => 1, // Количество строк
        "COL_COUNT" => 60, // Количество столбцов
        "IBLOCK_ID" => $ibId
    );
    $propId = $ibp->Add($arFields);

    if (!$propId) {
        return false;
        //\Bitrix\Main\Diag\Debug::dump($ibp->LAST_ERROR);
        //die();
    }

    return true;
}

Добавление данных в инфоблок

<?
function ibRowAdd($ibId, $arField, $arProps) {

    $el = new \CIBlockElement();

    $arItem = [
        "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
        "IBLOCK_ID" => $ibId,
        "PROPERTY_VALUES" => $arProps,
        "ACTIVE" => "Y", // активен
    ];

    $arItem = array_merge($arItem, $arField);

    // создаем элемент
    if ( !($ITEM_ID = $el->Add($arItem)) ) {
        return false;
    }

    return true;

}

Обновление данных в инфоблоке

<?
function ibRowUpdate($ibItemId, $arField, $arProps) {

    $el = new \CIBlockElement();

    $arItem = [
        "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
        "PROPERTY_VALUES" => $arProps,
        "ACTIVE" => "Y", // активен
    ];

    $arItem = array_merge($arItem, $arField);

    // обновляем элемент
    if ( !($ITEM_ID = $el->Update($ibItemId, $arItem)) ) {
        return false;
    }

    return true;

}

Удаление данных из инфоблока

<?
function ibRowDelete($ibItemId) {

    return \CIBlockElement::Delete($ibItemId);

}