Answer the question
In order to leave comments, you need to log in
CIBlockElement::Add - how to add a property of the list type?
$el = new CIBlockElement;
$PROP = array();
$PROP['mystring'] = "some string";
$PROP['mylist'] = ???
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(),
"PROPERTY_VALUES"=> PROP,
...
);
if($PRODUCT_ID = $el->Add($arLoadProductArray))
$PROP['mylist'] = array (01, 02 ..) - где 01, 02 .. это id значения свойства типа список
Answer the question
In order to leave comments, you need to log in
If you are not able to pass exactly the IDs of the list elements as input data (external import or some kind of file), then search by the list values and substitute their IDs from the already found elements
$iblockId = 1;//id инфоблока
$inputValues = [44, 45, 46];//Ваши входные данные
$enumIds = array_column(\Bitrix\Iblock\PropertyEnumerationTable::getList([
"select" => ["ID"],
"filter" => [
"PROPERTY.CODE" => "mylist",
"PROPERTY.IBLOCK_ID" => $iblockId,
"VALUE" => $inputValues
],
"cache" => [
"ttl" => 86400
]
]->fetchAll()), "ID");
Evgeny Nikolaev
thank you for the feature
//[НАЧАЛО]Функция получения кода свойства типа список(Enum) по его названию а так же Ид инфоблока и коду(имени) свойства
function myGetPropEnumId($name=false,$IBlockId=false,$code=false) {
if ($name and $IBlockId and $code) {
$name = $name . "";//Поле может прийти как int что может привести к неверному срабатыванию условия ниже, поэтому приводим к string
//В следующей строчке в качестве фильтра нельзя передать ~VALUE, если его передать всё равно выберутся все записи из фильтра без учёта ~VALUE. Требуется сравнение именно с ~VALUE, а не просто VALUE, поскольку просто VALUE будет содержать заменённые на " кавычки и если они есть совпадения не будет
$property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$IBlockId,"CODE"=>$code,"~VALUE"=>$name));
while ($enum_fields = $property_enums->GetNext()) {
if ($enum_fields["~VALUE"] == $name) {//Поскольку в качестве фильтра бесполезно передавать ~VALUE, проверяем совпадение в этом условии
return $enum_fields["ID"];//Если искомое значенией найдено возвращаем результат в этой строке
}
}
//Если искомое значение найдено не было выполняется код далее
//Определяем ID свойства в инфоблоке
// ID свойств так же можно было получить следующим методом: $result = \Bitrix\Iblock\PropertyTable::getList($params);
$properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y","IBLOCK_ID"=>$IBlockId,"PROPERTY_TYPE"=>"L","CODE"=>$code));
if ($prop_fields = $properties->GetNext()) {//Если удалось определить ID свойства в инфоблоке
$PROPERTY_ID = $prop_fields["ID"];
//Создаём элемент списка ENum и выполняем его добавление
$ibpenum = new CIBlockPropertyEnum;
// !!! ВАЖНО В СЛЕДУЮЩЕЙ СТРОЧКЕ УКАЗЫВАЕТСЯ ID СВОЙСТВА РАЗМЕР ИНФОБЛОКА ТОРГОВЫХ ПРЕДЛОЖЕНИЙ А НЕ СИМВОЛЬНЫЙ КОД
if ($PropID = $ibpenum->Add(Array("IBLOCK_ID"=>$IBlockId,"PROPERTY_ID"=>$PROPERTY_ID,"VALUE"=>$name))) {
return $PropID;//Возвращаем Id созданного свойства Enum
}
}
}
//Иначе возвращаем ошибку
return false;
}
//[КОНЕЦ]Функция получения кода свойства типа список(Enum) по его названию а так же Ид инфоблока и коду(имени) свойства
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question