Помогите пожалуйста разобраться с удалением одного из значений множественного свойства типа «файл». Осваиваю Битрикс Управление сайтом, пытаюсь решить такую задачу:
Имеется элемент инфоблока с активным множественным свойством типа «Привязка к файлу (на сервере)», имя и название свойства: FILE. В элементе инфоблока сохранены, предположим, 4 файла, нужно удалить один из них, выбрав по ID файла.
Результат метода GetProperties для моего свойства FILE, когда в нем сохранены 4 файла, выглядит так:
| Код |
|---|
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] => ) |
Перепробовал несколько руководств и примеров для удаления одного из файлов – почему-то получаю в результате либо удаление всех файлов, либо прежнее состояние свойства.
Вот код из описания к методу SetPropertyValues:
| Код |
|---|
$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
);
}
}
}
}
|
| Код |
|---|
Array ([FILE] => Array ([443413] => Array( [VALUE] => Array ( [del] => Y)))) |
Я ожидаю, что после выполнения кода из свойства удалится файл c PROPERTY_VALUE_ID = 443413, а остальные три - с PROPERTY_VALUE_ID 443412, 443414 и 443415 - останутся. Но после выполнения SetPropertyValueCode в свойстве FILE не остается ничего.
Подскажите пожалуйста, что я делаю не так? Как добиться, чтобы из свойства FILE удалялся только один файл, а не все четыре?
Спасибо!
), но в них нет ID файлов, а только старые PROPERTY_VALUE_ID