В 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 инфоблока, или список, чтобы не гонять обработчик по всем инфоблокам.
