iblock.element.add.form - добавить возможность загрузки файлов через main.file.input

Рейтинг: 3.8803  
На голосовании
Предложил Пользователь 722291 19.08.2017 12:41:32

iblock.element.add.form - добавить возможность загрузки файлов через main.file.input

Проблема следующая - в компоненте iblock.element.add.form файлы (для файловых свойств) обязательно должны загружаться в момент отправки формы (должен быть сформирован файловый массив), хотелось бы, чтобы можно было передавать только идентификатор файла, в этом случае можно было бы использовать удобную ajax-загрузку файлов и использовать компонент main.file.input.

Пример решения проблемы:
В файле \iblock.element.add.form\component.php заменить строки:
$arFile = $_FILES["PROPERTY_FILE_".$propertyID."_".$key];
$arFile["del"] = $_REQUEST["DELETE_FILE"][$propertyID][$key] == "Y" ? "Y" : "";
$arUpdatePropertyValues[$propertyID][$key] = $arFile;
на
if(!empty($value)){
   $arUpdatePropertyValues[$propertyID][$key] = $value;
} else {
   $arFile = $_FILES["PROPERTY_FILE_".$propertyID."_".$key];
   $arFile["del"] = $_REQUEST["DELETE_FILE"][$propertyID][$key] == "Y" ? "Y" : "";
   $arUpdatePropertyValues[$propertyID][$key] = $arFile;
}

Рейтинг: 0  
Пользователь 722291 15.05.2018 12:30:47
Чтобы добавить аналогичную возможность для загрузки PREVIEW_PICTURE, нужно заменить
$arFile = $_FILES["PROPERTY_FILE_".$propertyID."_0"];
$arFile["del"] = $_REQUEST["DELETE_FILE"][$propertyID][0] == "Y" ? "Y" : "";
$arUpdateValues[$propertyID] = $arFile;
на
if(!empty($arProperties[$propertyID][0])){
   $arUpdateValues[$propertyID] = CFile::MakeFileArray($arProperties[$propertyID][0]);
} else {
   $arFile = $_FILES["PROPERTY_FILE_".$propertyID."_0"];
   $arFile["del"] = $_REQUEST["DELETE_FILE"][$propertyID][0] == "Y" ? "Y" : "";
   $arUpdateValues[$propertyID] = $arFile;
}