В 11 версии продукта произошли сильные изменения в модуле Фотогалерея 2.0, помимо нового дизайна и загрузчика было решено отказаться от использования в компонентах детальной картинки инфоблока, поэтому, теперь она не создается автоматически как картинка анонса при загрузке. А как быть тем, кто использовал свою логику, основанную именно на детальных картинках? Именно такие вопросы посыпались в обращениях к ТП после обновления. Данный обработчик призван решить эту проблему[spoiler], добавляем его в файл /bitrix/php_interface/init.php и радуемся: теперь у нас будет создаваться детальная картинка при загрузке из оригинала, причем будет учитывать настройки инфоблока по размерам:
Единственное - лучше вручную указать ID инфоблока, или список, чтобы не гонять обработчик по всем инфоблокам.
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass", "OnBeforeIBlockElementAddHandler")); class MyClass { // создаем обработчик события "OnBeforeIBlockElementAdd" function OnBeforeIBlockElementAddHandler(&$arFields) { if($arFields["IBLOCK_ID"] == 10) { if (!is_array($arFields["DETAIL_PICTURE"]) && is_array($arFields["PROPERTY_VALUES"]["REAL_PICTURE"]["n0"])) { $iblock_fields = CIBlock::GetArrayByID($arFields["IBLOCK_ID"]) ; if ($iblock_fields["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"]["SCALE"] == "Y") { $new_width = $iblock_fields["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"]["WIDTH"]; $new_height = $iblock_fields["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"]["HEIGHT"]; } else { $new_width = 800; $new_height = 800; } $arFile = CFile::SaveFile( array( "name"=>$arFields["PROPERTY_VALUES"]["REAL_PICTURE"]["n0"]["name"], "tmp_name"=>$arFields["PROPERTY_VALUES"]["REAL_PICTURE"]["n0"]["tmp_name"], "MODULE_ID"=>"photogallery", "del"=>"N"), "tmp") ; $arResized_file = CFile::ResizeImageGet($arFile, array( 'width'=>$new_width, 'height'=>$new_height ) ); if (is_array($arResized_file)) { $arFields["DETAIL_PICTURE"] = CFile::MakeFileArray($arResized_file["src"]); } } } } } |
Единственное - лучше вручную указать ID инфоблока, или список, чтобы не гонять обработчик по всем инфоблокам.