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