День добрый, подскажите в чем моя ошибка.. перебрал все варианты из официальной доки, форума, интернета, и все равно работает жутко не стабильно.
У торгового предложения есть 3 файла/картинки.. они скачиваются и сохраняются в temp , после чего создается массив $prop , и обновляется свойство через
CIBlockElement::SetPropertyValuesEx . После этого это свойство перечитывается снова в массив, и эти же файлы прикрепляются к товару.
Судя по выводу, все работает как надо, но когда захожу смотреть результат, оказывается что у торгового предложения и у товара прикреплено от 1 до 3х файлов, причем случайным образом. Это могут быть одни и теже файлы, могут быть разные (условно у товара 1 и 3, у предложения 2 и 1). И никакой закономерности, 10 раз запустил, 10 раз разный результат, файлы при этом скачиваются каждый раз нормальном.
Если сюда еще добавить обновление детальной картинки товара, то вносится еще больше рандома.
У торгового предложения есть 3 файла/картинки.. они скачиваются и сохраняются в temp , после чего создается массив $prop , и обновляется свойство через
CIBlockElement::SetPropertyValuesEx . После этого это свойство перечитывается снова в массив, и эти же файлы прикрепляются к товару.
Судя по выводу, все работает как надо, но когда захожу смотреть результат, оказывается что у торгового предложения и у товара прикреплено от 1 до 3х файлов, причем случайным образом. Это могут быть одни и теже файлы, могут быть разные (условно у товара 1 и 3, у предложения 2 и 1). И никакой закономерности, 10 раз запустил, 10 раз разный результат, файлы при этом скачиваются каждый раз нормальном.
Если сюда еще добавить обновление детальной картинки товара, то вносится еще больше рандома.
Код |
---|
/** * Обходим массив файлов и сохраняем файлы, по прикрепленным ссылкам */ foreach($arItems as $arItem){ if(array_key_exists('files', $arItem) && count($arItem['files'])>0) { $props = array(); $detailPicture = null; //echo "<pre>"; print_r($detailPicture); echo "</pre>"; //echo "<pre>"; print_r($props); echo "</pre>"; foreach ($arItem['files'] as $arTemp) { $fileExt = substr(strrchr(parse_url($arTemp['path'], PHP_URL_PATH), '.'), 1); $tmpFileName = tempnam($_SERVER['DOCUMENT_ROOT'].'/upload/tmp/images', 'img_').'.'.$fileExt; $fileContent = file_get_contents($arTemp['path']); file_put_contents($tmpFileName, $fileContent); //$arFile = CFile::MakeFileArray($arTemp['path']); $arFile = CFile::MakeFileArray($tmpFileName); $props['PHOTO'][] = array( 'VALUE' => $arFile, 'DESCRIPTION' => $arTemp['name'], ); } echo "<pre>"; print_r($props); echo "</pre>"; //выводит массив из 3х файлов //отдельно прикрепленные файлы if(count($props['PHOTO'])>0) { CIBlockElement::SetPropertyValuesEx($arItem['ID'], $this->skuIdBlock, $props); $this->success($arItem['ID'], "Фото торгового предложения обновлено успешно [" . $arItem['ID'] . "] "); } //отдельно прикрепленные файлы if(count($props['PHOTO'])>0) { $propsMain = array(); $res = CIBlockElement::GetProperty($this->idBlock, $arItem['PROPERTY_CML2_LINK_VALUE'], "sort", "asc", array("CODE" => "PHOTO")); while ($ob = $res->GetNext()) { if($ob['VALUE']) { $propsMain['PHOTO'][] = array( 'VALUE' => CFile::MakeFileArray(\CFile::GetPath($ob['VALUE'])), 'DESCRIPTION' => $ob['DESCRIPTION'], ); } } $res = CIBlockElement::GetProperty($this->skuIdBlock, $arItem['ID'], "sort", "asc", array("CODE" => "PHOTO")); while ($ob = $res->GetNext()) { if($ob['VALUE']) { $propsMain['PHOTO'][] = array( 'VALUE' => CFile::MakeFileArray(CFile::GetPath($ob['VALUE'])), 'DESCRIPTION' => $ob['DESCRIPTION'], ); } } echo "<pre>"; print_r($propsMain); echo "</pre>"; //у товара изначально нет файлов, поэтому в массиве опять же 3 файла из торгового предложения CIBlockElement::SetPropertyValuesEx($arItem['PROPERTY_CML2_LINK_VALUE'], $this->idBlock, $propsMain); $this->success($arItem['ID'], "Фото товара обновлено успешно [" . $arItem['PROPERTY_CML2_LINK_VALUE'] . "] "); } } } |