Наверное, всем известна опция в настройках инфоблока Создавать картинку анонса из детальной (если не задана). Но как быть, если 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);
}
}
}
}
Параметры функции: