2020-12-18 22:32:00

1С-Битрикс, (bitrix) создать свойство API

Иногда требуется создать новое свойство в инфоблоке и добавить к нему новое значение. Этот вариант решения подразумевает создание свойства типа список и создание и добавление к нему еще одного значения.

$PREF_ART - это префикс новых свойств и элементов (для уникальности)
$arrProp - Массив новых свойств.
$IBLOCK_ID - Id инфоблока.
$ELEMENT_ID - Id элемента.
$CODE - Код свойства.
$arrProp = array();
$arrProp[] =  array('name'=>'Бренд', 'id'=>$PREF_ART.'BRAND', 'code'=>$PREF_ART.'BRAND', 'value'=>'AUDI');
function getPropertyID($IBLOCK_ID, $CODE){
    $arFilter = array('IBLOCK_ID' => $IBLOCK_ID );
    $res = CIBlockProperty::GetList(array(), $arFilter);
    while($field = $res->GetNext()){
        if($field['CODE'] == $CODE)    
            $arrCount = $field ;
            }
    if($arrCount)
        return $arrCount['ID'];
    else return false;

}

Данный скрип создаёт новое свойство типас список, если оно отсутсвует в инфоблоке. Если оно есть, то добавляет его. Если значение в массиве $arrProp уникальное, то добавим новое значение и выбиреме его, если нет то создадим новое и выберем это значение.


function addProperty($arrProp, $IBLOCK_ID, $PREF_ART, $ELEMENT_ID){
$ibpenum = new CIBlockPropertyEnum;

    foreach($arrProp as $val){

    if($idProp = getPropertyID($IBLOCK_ID, $PREF_ART.$val['code'])){
        
        $arPropValues = array();
        $dbItems = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>$PREF_ART.$val['code']));
        
        $i=0; $arr_property_value = []; while($arItem = $dbItems->GetNext()) {

            $arr_property_value[] = $arItem['VALUE'];
              
            $i++;
                                                  }

        if(!in_array($val['value'], $arr_property_value))
            $ibpenum->Add(Array('PROPERTY_ID'=>$idProp, 'VALUE'=>$val['value'])); 
        
        $dbItems = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>$PREF_ART.$val['code']));
            while($arItem = $dbItems->GetNext()) {
                if($val['value'] == $arItem['VALUE']) {
                CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, false, array($PREF_ART.$val['code'] => $arItem['ID']));  
                }
            }
        
    }    
        else   
        
        {
            
        $arFields = Array( 
                 "NAME" => $val['name'],
                 "ACTIVE" => "Y",
                 "SORT" => "100",
                 "CODE" => $PREF_ART.$val['code'],
                 "PROPERTY_TYPE" => "L",
                 "IBLOCK_ID" => $IBLOCK_ID,
                 "VALUE" => $val['value'], "DEF" => "N", "SORT" => "100", 
        );

                $ibp = new CIBlockProperty;

                if(!empty($arFields)){ 
                
                $PropID = $ibp->Add($arFields); 
                $ibpenum->Add(Array('PROPERTY_ID'=> $PropID, 'VALUE'=> $val['value'])); 
                                 
                }

            $dbItems = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>$PREF_ART.$val['code']));
            while($arItem = $dbItems->GetNext()) {
                if($val['value'] == $arItem['VALUE']) {
                      CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, false, array($PREF_ART.$val['code'] => $arItem['ID']));
                }
            }


            }
        
        }
        
}

Обратный звонок

Имя
Телефон
x


Имя
Телефон