Задать вопрос
Diversia
@Diversia

Как изменить размер изображения в нескольких свойствах инфоблока Битрикс?

Здравствуйте!

Есть код, который изменяет размер изображений по нужному свойству инфоблока (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 принимало несколько свойств и выполнялось уменьшение по нескольким свойствам инфоблока сразу? Т.е.:
$PROPERTY_CODE = array("morePhotos", "photo");
  • Вопрос задан
  • 900 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
sabramovskikh
@sabramovskikh
Сделать в 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()) {
                   .........
       }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы