Answer the question
In order to leave comments, you need to log in
How to change the image size in several Bitrix infoblock properties?
Hello!
There is a code that resizes images according to the desired infoblock property (init.php):
<?
// **************************************************************************
// События которые срабатывают при создании или изменении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("resizePhotoClass", "resizePhoto"));
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("resizePhotoClass", "resizePhoto"));
// **************************************************************************
class resizePhotoClass {
function resizePhoto(&$arFields) {
global $APPLICATION;
$IBLOCK_ID = array(1,2); //ID инфоблоков свойство каторых нуждается в масштабировании
$PROPERTY_CODE = "morePhotos"; // код свойства
$imageMaxWidth = 800; //Максимальная ширина картинки
$imageMaxHeight = 700; //Максимальная высота картинки
if(in_array(intval($arFields["IBLOCK_ID"]), $IBLOCK_ID)) {
$VALUES = array();
$VALUES_OLD = array();
//Получаем свойство значение св-ва $PROPERTY_CODE
$res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));
while ($ob = $res->GetNext()) {
$file_path = CFile::GetPath($ob['VALUE']); // Получаем путь к файлу
if($file_path) {
$imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
// Если размер больше установленного минимума
if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
// Уменьшаем размер картинки
$file = CFile::ResizeImageGet($ob['VALUE'], array('width'=>$imageMaxWidth, 'height'=>$imageMaxHeight), BX_RESIZE_IMAGE_PROPORTIONAL, true, array(), false, 80);
// добавляем в массив VALUES новую уменьшенную картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]);
} else {
// добавляем в массив VALUES старую картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
}
// Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
$VALUES_OLD[] = $ob['VALUE'];
}
}
// Если в массиве есть информация о новых файлах
if(count($VALUES) > 0) {
$ELEMENT_ID = $arFields["ID"]; // код элемента
$PROPERTY_VALUE = $VALUES; // значение свойства
// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
// Удаляем старые большие изображения
foreach ($VALUES_OLD as $key=>$val) {
CFile::Delete($val);
}
}
}
}
}
?>
$PROPERTY_CODE = array("morePhotos", "photo");
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question