Наверное, всем известна опция в настройках инфоблока Создавать картинку анонса из детальной (если не задана). Но как быть, если PREVIEW_PICTURE или DETAIL_PICTURE нужно создавать из дополнительных изображений MORE_PHOTO?
Существует различное варианты реализации. Предлагаем во внимание способ решения через механизм коллекций модуля Инструменты, коллекции, групповые действия.Суть метода состоит в следующем:
Настроенная коллекция:
function __set_picture($arFields,$arUserFields = array(),$is_preview,$is_detail) { if ($arFields['ID'] >0 && $arFields['IBLOCK_ID'] > 0) { $property_code = "MORE_PHOTO"; //КОД свойства Изображения [MORE_PHOTO] - указывать свой $property_id = 45; //ИД свойства Изображения [MORE_PHOTO] - указывать свой $btrue = false; $file = false; if (is_array($arUserFields['PROPERTY'][$property_code]['VALUE']) && count($arUserFields['PROPERTY'][$property_code]['VALUE'])>0) { $first_file_id = $arUserFields['PROPERTY'][$property_code]['VALUE'][0]; } if (is_array($arUserFields['PROPERTY_VALUES'][$property_id]) && count($arUserFields['PROPERTY_VALUES'][$property_id])>0) { if (is_array($arUserFields['PROPERTY_VALUES'][$property_id]['n0']['VALUE'])) //если грузятся картинки через админку { if ($arUserFields['PROPERTY_VALUES'][$property_id]['n0']['VALUE']['error']==0) $btrue = true; } elseif (is_array($arUserFields['PROPERTY_VALUES'][$property_id]) //если грузятся картинки через апи с указанием ИД свойства && isset($arUserFields['PROPERTY_VALUES'][$property_id]['name'])) { if ($arUserFields['PROPERTY_VALUES'][$property_id]['error']==0) $btrue = true; } elseif (is_array($arUserFields['PROPERTY_VALUES'][$property_code]) //если грузятся картинки через апи с указанием КОДА свойства && isset($arUserFields['PROPERTY_VALUES'][$property_code]['name'])) { if ($arUserFields['PROPERTY_VALUES'][$property_code]['error']==0) $btrue = true; } } //если меняются Изображения if ($btrue) { if (!is_array($file)) { $db_props = CIBlockElement::GetProperty($arFields['IBLOCK_ID'], $arFields['ID'], array("sort" => "asc"), Array("CODE"=>$property_code)); if($ar_props = $db_props->Fetch()) { $first_file_id = $ar_props['VALUE']; } } if ($first_file_id>0) { if ($first_file_id>0) $file = CFile::MakeFileArray($first_file_id); $el = new CIBlockElement; $arload = Array(); if ($is_preview) $arload["PREVIEW_PICTURE"] = $file; if ($is_detail) $arload["DETAIL_PICTURE"] = $file; $res = $el->Update($arFields['ID'], $arload); } } } }
Параметры функции: