Помогите пожалуйста разобраться с удалением одного из значений множественного свойства типа «файл». Осваиваю Битрикс Управление сайтом, пытаюсь решить такую задачу:
Имеется элемент инфоблока с активным множественным свойством типа «Привязка к файлу (на сервере)», имя и название свойства: FILE. В элементе инфоблока сохранены, предположим, 4 файла, нужно удалить один из них, выбрав по ID файла.
Результат метода GetProperties для моего свойства FILE, когда в нем сохранены 4 файла, выглядит так:
[CODE]Array ([ID] => 201
[TIMESTAMP_X] => 2023-05-22 14:45:05
[IBLOCK_ID] => 53
[NAME] => FILE
[ACTIVE] => Y
[SORT] => 500
[CODE] => FIL
[DEFAULT_VALUE] =>
[PROPERTY_TYPE] => S
[ROW_COUNT] => 1
[COL_COUNT] => 30
[LIST_TYPE] => L
[MULTIPLE] => Y
[XML_ID] =>
[FILE_TYPE] =>
[MULTIPLE_CNT] => 5
[TMP_ID] =>
[LINK_IBLOCK_ID] => 0
[WITH_DESCRIPTION] => N
[SEARCHABLE] => N
[FILTRABLE] => N
[IS_REQUIRED] => N
[VERSION] => 1
[USER_TYPE] => FileMan
[USER_TYPE_SETTINGS] =>
[HINT] =>
[PROPERTY_VALUE_ID] => Array
(
[0] => 443412
[1] => 443413
[2] => 443414
[3] => 443415
)
[VALUE] => Array
(
[0] => 75224
[1] => 75225
[2] => 75226
[3] => 75227
)
[DESCRIPTION] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[VALUE_ENUM] =>
[VALUE_XML_ID] =>
[VALUE_SORT] =>
[~VALUE] => Array
(
[0] => 75224
[1] => 75225
[2] => 75226
[3] => 75227
)
[~DESCRIPTION] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[~NAME] => FILE
[~DEFAULT_VALUE] =>
) [/CODE]
Перепробовал несколько руководств и примеров для удаления одного из файлов – почему-то получаю в результате либо удаление всех файлов, либо прежнее состояние свойства.
Вот код из описания к методу SetPropertyValues:
[CODE]$arFiles = Array($incID); // на вход подаю ИД файла, который хочу удалить, например 75225$elId = *******; // ИД элемента инфоблока
$obElement =
\CIBlockElement::GetList(
[],
[
'ID' => (int)$elId,
'IBLOCK_ID' => (int)$iblock_id
],
false,
false,
[
'ID',
'IBLOCK_ID',
]);
if ($obFields =
$obElement->GetNextElement()) {
$arProperties = $obFields->GetProperties();
if (!empty($arProperties)) {
foreach ($arProperties as $sPropCode => $arPropValues) {
foreach ($arPropValues['VALUE'] as $iKeyValue => $sValue) {
if (in_array($sValue, $arFiles) && $arPropValues['PROPERTY_VALUE_ID'][$iKeyValue] > 0) {
$arDeleteList[$sPropCode][$arPropValues['PROPERTY_VALUE_ID'][$iKeyValue]] = [
'VALUE' => [
'del' => 'Y',
]
];
}
}
}
if (!empty($arDeleteList)) {
foreach ($arDeleteList as $sPropForDelete => $arDeleteFiles) {
CIBlockElement::SetPropertyValueCode(
$elId,
$sPropForDelete,
$arDeleteFiles
);
}
}
}
}
[/CODE]Массив $arDeleteList формируется в таком виде:[CODE]Array ([FILE] => Array ([443413] => Array( [VALUE] => Array ( [del] => Y))))[/CODE]
Я ожидаю, что после выполнения кода из свойства удалится файл c PROPERTY_VALUE_ID = 443413, а остальные три - с PROPERTY_VALUE_ID 443412, 443414 и 443415 - останутся. Но после выполнения SetPropertyValueCode в свойстве FILE не остается ничего.
Подскажите пожалуйста, что я делаю не так? Как добиться, чтобы из свойства FILE удалялся только один файл, а не все четыре?
Спасибо!