+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Проверять размер изображения при сохранении элемента ИБ

Заказчик попросил сделать ограничение по размеру загружаемой картинки.  Всё просто, если картинка больше минимальной. Её просто обрезаем под размер. При этом делаем это в result-modifier шаблона, на не в настройках ИБ, чтобы всегда можно было получить изначальную картинку. Но что делать, если картинка меньше заданного размера? Заказчик хочет, чтобы загрузить такую картинку было нельзя. Кроме этого необходимо вывести сообщение об ошибку в стандартном интерфейсе битрикса.  К сожалению, встроенного механизма для решения этой задачи, в битриксе нет, поэтому будем желать обработчик события.

Задача:
При сохранении элемента инфоблока, проверять размер картинки и сообщать, если картинка меньше заданного размера.



Решение:
Написать обработчик на событие OnBeforeIBlockElementAdd и OnBeforeIBlockElementUpdate в котором проверять размер и выдавать исключение если картинка не маленькая.

Код:
class image{
    function checkSize(&$arFields) {
      // инфоблок, в котором проводить проверку.
      $iblockId = 4;
      // минимальная ширина
      $width = 300; 
      // минимальная высота
      $height = 300;
      // массив ошибок
      $errors = false; 
      // проверяем, инфоблок, в котором сохораняется картинка.
      if($arFields["IBLOCK_ID"] == $iblockId) {
         // получаем размеры временного файла
         $file = CFile::GetImageSize ($arFields['DETAIL_PICTURE']['tmp_name']);
         // если получены размеры.
         if ($file !== false && is_array($file)){
            // проверяем ширину
            if ($file[0] < $width){
               $errors[] = 'Ширина изображения должна быть не меньше '.$width.' px. Ширина загружаемого файла '.$file[0].' px';
            } 
            // проверяем высоту
            if ($file[1] < $height){
               $errors[] = 'Высота изображения должна быть не меньше '.$height.' px. Ширина загружаемого файла '.$file[1].' px';
            }
            // если были ошибки
            if (is_array($errors)){
               // выдаём исключение с сообщением об ошибке
               global $APPLICATION;
               $APPLICATION->throwException(implode("<br>", $errors));
               // возращаем false, чтобы не сохранять инфоблок
               return false;
            }   
         }
      }
    }
}




Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA