Инструменты пользователя

Инструменты сайта


programming:1c-bitrix:auto-image-resize-in-element

Автоматический ресмайз изображений при сохранении элемента

Рассмотрим частную задачу: При пересохранении элемента определенного информационного блока, при наличии в поле детальной картинки элемента изображения производить его ресайз и сохранять две уменьшенные копии в свойствах элемента. При этом при удалении значения определенного свойства – одного из изображений, должна происходить операция генерации изображений для всех свойств заново.

Пример решения задачи: Создадим в настройках информационного блока два свойства типа файл с именем и символьным кодом f1 и f2.

Далее в init.php расположим обработчик

Код

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("MyClass", "OnAfterIBlockElementUpdateHandler"));
class MyClass
{    
    function OnAfterIBlockElementUpdateHandler(&$arFields)
    { $IBLOCK_ID = 18;
      if($arFields["IBLOCK_ID"] == $IBLOCK_ID):
       $res = CIBlockElement::GetByID($arFields["ID"]);
        if($ar_res = $res->GetNext())
        
            $db_props = CIBlockElement::GetProperty($ar_res["IBLOCK_ID"], $ar_res["ID"], "sort", "asc", Array("CODE"=>"f1"));
            if($ar_props = $db_props->Fetch()):                            
                if($ar_props["VALUE"]<=0):                
                    $ID_NewImages_1 = CFile::CopyFile($ar_res["DETAIL_PICTURE"]);
                    $ID_NewImages_2 = CFile::CopyFile($ar_res["DETAIL_PICTURE"]);        
                                    
                    $arFile_1 = CFile::MakeFileArray($ID_NewImages_1);
                    $arFile_2 = CFile::MakeFileArray($ID_NewImages_2);
                    
            
                    $arSize = array("WIDTH" => "100","HEIGHT" => "100","IGNORE_ERRORS" => "N","METHOD" => "resample");        
            
                    $arFile_1 = CIBlock::ResizePicture($arFile_1,$arSize);
                    $arFile_2 = CIBlock::ResizePicture($arFile_2,$arSize);
                        
                    CIBlockElement::SetPropertyValueCode($ar_res["ID"], "f1", $arFile_1);
                    CIBlockElement::SetPropertyValueCode($ar_res["ID"], "f2", $arFile_2);
                endif;
            endif;    
        endif;
    }
}

В итоге получаем возможность создания двух привью изображения, хранящихся в свойствах элемента

programming/1c-bitrix/auto-image-resize-in-element.txt · Последнее изменение: 2017/03/27 11:26 — artur

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki