Выгрузка товаров из 1С в интернет-магазин, шаблон "Аспро Максимум". Задача, чтобы изображения ("MORE_PHOTOS") выгружались в определенном порядке, а именно по алфавиту. |
Сделала обработчик в init.php при добавлении и изменении элемента, который сортирует по данному полю.
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "SortMorePhotos"); AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "SortMorePhotos"); function SortMorePhotos(&$arFields){ if(!empty($arFields['IBLOCK_ID']) && in_array($arFields['IBLOCK_ID'],[53,55])){ //инфоблок товаров и офферсов $photosPropId = ($arFields['IBLOCK_ID'] == 53) ? 507 : 662; //id свойства MORE_PHOTOS в данных инфоблоках $arPhotos = []; if(isset($arFields["PROPERTY_VALUES"][$photosPropId])){ foreach($arFields["PROPERTY_VALUES"][$photosPropId] as $keyPhoto => $arPhoto){ if(!empty($arPhoto)){ if(1*$keyPhoto == 0){ $arPhotos[$keyPhoto] = ($arPhoto["DESCRIPTION"]!=="") ? $arPhoto["DESCRIPTION"] : $arPhoto["VALUE"]["name"]; } } } } if(!empty($arFields["ID"])){ $res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("ID" => $photosPropId)); while ($ob = $res->GetNext()){ $arPhoto = CFile::GetFileArray($ob["VALUE"]); $arPhotos[$ob["PROPERTY_VALUE_ID"]] = ($arPhoto["DESCRIPTION"]!=="") ? $arPhoto["DESCRIPTION"] : $arPhoto["FILE_NAME"]; $arPhotosFull[$ob["PROPERTY_VALUE_ID"]] = $ob; } } if(!empty($arPhotos)){ asort($arPhotos); $arNewPhotos = []; foreach ($arPhotos as $keyPhoto => $descPhoto) { if(isset($arFields["PROPERTY_VALUES"][$photosPropId][$keyPhoto])){ $arNewPhotos[$keyPhoto] = $arFields["PROPERTY_VALUES"][$photosPropId][$keyPhoto]; } else{ $arNewPhotos[$keyPhoto] = array ( 'VALUE' => array ( 'name' => NULL, 'type' => NULL, 'tmp_name' => NULL, 'error' => 4, 'size' => 0, 'description' => '', ), 'DESCRIPTION' => '', ); } } $arFields["PROPERTY_VALUES"][$photosPropId] = $arNewPhotos; } } } |