Услуги профессионального Битрикс-программиста

Сортировка изображений по названию при выгрузке из 1С


Выгрузка товаров из 1С в интернет-магазин, шаблон "Аспро Максимум".
Задача, чтобы изображения ("MORE_PHOTOS") выгружались в определенном порядке, а именно по алфавиту.
Из 1С название выгружается в поле DESCRIPTION.
Сделала обработчик в 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;
        }        
    }
}
Вероника Малышева
Битрикс-программист
+7 (953) 585-13-09

Если пост был полезным, можете угостить меня "чашечкой кофе" :)
Сбер, Альфа: по номеру телефона +7 (953) 585-13-09.
Спасибо!
Смотреть все посты