| Выгрузка товаров из 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;
}
}
} |