Заметка больше для себя.
Столкнулся с задачей - в множественном свойстве типа Файл было много пустых полей под файлы, плюс штук по 10 актуальных файлов.
Надо импортировать новые картинки, если их нет еще. Старые удалить. Плюс удалить пустые поля под файлы.
Столкнулся с задачей - в множественном свойстве типа Файл было много пустых полей под файлы, плюс штук по 10 актуальных файлов.
Надо импортировать новые картинки, если их нет еще. Старые удалить. Плюс удалить пустые поля под файлы.
//массив с путями до картинок $images = explode(",", $arRes[$i]); //смотрим какие сейчас картинки есть $arCurFiles = array(); $rsCurPhotosList = CIBlockElement::GetProperty($IBLOCK_ID, $PRODUCT_ID, array(), array('CODE' => 'PHOTO')); while ($arCurPhoto = $rsCurPhotosList->GetNext()) { $arCurFile = CFile::GetFileArray($arCurPhoto['VALUE']); if (empty($arCurFile['ORIGINAL_NAME'])) { //Это пустые поля, криво удаленные файлы когда-то $arCurFile['ORIGINAL_NAME'] = md5(time()) . rand(0, 100) . rand(0, 100) . rand(0, 100) . rand(0, 100); } $arCurFiles[$arCurFile['ORIGINAL_NAME']] = $arCurPhoto['PROPERTY_VALUE_ID']; } //Готовим новое значение множественного поля $arFile = array(); foreach ($images as $keys => $arRes[$i]) { if (in_array(basename($arRes[$i]), array_keys($arCurFiles))) { $arCurFiles[basename($arRes[$i])] = ''; continue; } $arCurFiles[basename($arRes[$i])] = ''; $arFile[] = array('VALUE' => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"] . $arRes[$i]), "DESCRIPTION" => ""); } //Помечаем на удаление файлы, которых нет в текущей загрузке foreach ($arCurFiles as $name => $PROPERTY_VALUE_ID) { if (!empty($PROPERTY_VALUE_ID)) { $arFile[$PROPERTY_VALUE_ID]['VALUE'] = array('del' => 'Y'); } } //Обновляемся if (!empty($arFile)) { CIBlockElement::SetPropertyValuesEx($PRODUCT_ID, $IBLOCK_ID, array('PHOTO' => $arFile)); } |