Очень удобно дополнительные картинки товара загружать в множественное свойство с типом "файл" - MORE_PHOTO.
Но есть одно неудобство - нельзя штатными средствами настроить автоматический ресайз этих фотографий при добавлении. Так, клиент может грузить на сайт фотки с разрешением 4000х3000 пикселей, и дисковое пространство будет неоправданно забиваться.
Чтобы уменьшить фотки - можно использовать такой обработчик:
/bitrix/php_interface/init.php
Данный скрипт можно применить как на новом сайте, так и на уже существующем (например, если у товара уже были загружены большие фотки, то если зайти на страницу редактирования этого товара и нажать "сохранить" то фотки автоматом уменьшатся). При этом старый файл с диска удалится (перезапишется на новый).
Кроме того, данный способ сохраняет свойство description если оно было задано у картинок.
Но есть одно неудобство - нельзя штатными средствами настроить автоматический ресайз этих фотографий при добавлении. Так, клиент может грузить на сайт фотки с разрешением 4000х3000 пикселей, и дисковое пространство будет неоправданно забиваться.
Чтобы уменьшить фотки - можно использовать такой обработчик:
/bitrix/php_interface/init.php
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyResizeClass", "OnAfterIBlockElement")); AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("MyResizeClass", "OnAfterIBlockElement")); class MyResizeClass { function OnAfterIBlockElement(&$arFields) { global $APPLICATION, $USER; $PROPERTY_CODE = "MORE_PHOTO"; // код свойства $imageMaxWidth = 1024; // Максимальная ширина уменьшенной картинки $imageMaxHeight = 768; // Максимальная высота уменьшенной картинки // Находим свойство $dbRes = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE)); while ($arMorePhoto = $dbRes->GetNext(true, false)) { if ($arMorePhoto["PROPERTY_TYPE"] == "F" // файл && $arMorePhoto["MULTIPLE"] == "Y" // множественное ) { // находим подробные сведения о файле $arFile = CFile::GetFileArray($arMorePhoto["VALUE"]); // проверяем, что файл является картинкой if (!CFile::IsImage($arFile["FILE_NAME"])) continue; // Если размер больше допустимого if ($arFile["WIDTH"] > $imageMaxWidth || $arFile["HEIGHT"] > $imageMaxHeight) { // Временная картинка $tmpFilePath = $_SERVER['DOCUMENT_ROOT']."/upload/tmp/".$arFile["FILE_NAME"]; // Уменьшаем картинку $resizeRez = CFile::ResizeImageFile( // уменьшение картинки для превью $source = $_SERVER['DOCUMENT_ROOT'].$arFile["SRC"], $dest = $tmpFilePath, array( 'width' => $imageMaxWidth, 'height' => $imageMaxHeight ), $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL, // метод ресайза $waterMark = array(), // водяной знак (пустой) $jpgQuality = 95 // качество уменьшенной картинки в процентах ); // Записываем изменение в свойство if ($resizeRez) { $arNewFile = CFile::MakeFileArray($tmpFilePath); CIBlockElement::SetPropertyValueCode($arFields["ID"], $PROPERTY_CODE, array($arMorePhoto["PROPERTY_VALUE_ID"] => array( "VALUE" => $arNewFile, "DESCRIPTION"=> $arMorePhoto["DESCRIPTION"] )) ); // Удалим временный файл unlink($tmpFilePath); } } } } } } |
Данный скрипт можно применить как на новом сайте, так и на уже существующем (например, если у товара уже были загружены большие фотки, то если зайти на страницу редактирования этого товара и нажать "сохранить" то фотки автоматом уменьшатся). При этом старый файл с диска удалится (перезапишется на новый).
Кроме того, данный способ сохраняет свойство description если оно было задано у картинок.