День добрый, подскажите в чем моя ошибка.. перебрал все варианты из официальной доки, форума, интернета, и все равно работает жутко не стабильно.
У торгового предложения есть 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'] . "] ");
}
}
} |