D
D
Diversia2017-05-25 09:39:01
PHP
Diversia, 2017-05-25 09:39:01

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); 
            }             
         }                   
      } 
   } 
}
?>

Please tell me how to set up the script so that $PROPERTY_CODE accepts several properties and decreases by several infoblock properties at once? Those.:
$PROPERTY_CODE = array("morePhotos", "photo");

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey, 2017-05-25
@Diversia

Make in foreach

$PROPERTY_CODE = array("morePhotos", "photo");
foreach ($PROPERTY_CODE as $code) {
  $res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $code)); 
         while ($ob = $res->GetNext()) {
                   .........
       }
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question