Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Resize-обработчик на Новости

00 голосов
3
Так. На битриксе меньше недели, поэтому не ругайте сильно, пожалуйста.

Требуется: на свойство типа "Файл" (изображения), находящееся в инфоблоке "Новости", повесить resize-обработчик, чтобы все изображения минимизировались до нужных размеров.

Как я понял, обработчик нужно ставить сюда:
/bitrix/php_interface/init.php

Т.к. Новости - это iblock, вписал в init.php дефолтный пример обработчика из описания функции "CIBlock::ResizePicture" (http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/ResizePicture.php), изменив в нём только значения переменных $IBLOCK_ID и $PROPERTY_ID на нужные:
Код
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyHandlers", "ResizeElementProperty"));
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("MyHandlers", "ResizeElementProperty"));

class MyHandlers
{
   function ResizeElementProperty(&$arFields)
   {
      global $APPLICATION;
      //Код инфоблока свойство каторого нуждается в масштабировании
      $IBLOCK_ID = 1;
      //Идентификатор свойства
      $PROPERTY_ID = 32;
      //Наш инфоблок и значения свойства в наличии
      if(
         $arFields["IBLOCK_ID"] == $IBLOCK_ID
         && is_array($arFields["PROPERTY_VALUES"])
         && array_key_exists(15, $arFields["PROPERTY_VALUES"])
      )
      {
         foreach($arFields["PROPERTY_VALUES"][$PROPERTY_ID] as $key => $arFile)
         {
            //Изменяем размеры картинки
            $arNewFile = CIBlock::ResizePicture($arFile, array(
               "WIDTH" => 100,
               "HEIGHT" => 100,
               "METHOD" => "resample",
            ));
            if(is_array($arNewFile))
               $arFields["PROPERTY_VALUES"][$PROPERTY_ID][$key] = $arNewFile;
            else
            {
               //Можно вернуть ошибку
               $APPLICATION->throwException("Ошибка масштабирования изображения в свойстве \"Файлы\":".$arNewFile);
               return false;
            }
         }
      }
   }
}

Как и следовало ожидать, нужная картинка при изменении её в одной новостей была загружена в полном размере (без ресайза).
Ещё раз прошу прощения за свою некомпетентность, но подскажите пожалуйста, что я делаю не так?
спросил 13 Март, 14 от Yorie (100 баллов)

3 Ответы

00 голосов
Цитата
donatello2005 пишет:
но подскажите пожалуйста, что я делаю не так?


Подсказываю -- вы пытаетесь изобретать велосипед, который уже изобретен.
ответил 30 Авг, 14 от Siemka (1,020 баллов)
00 голосов
Цитата
Роман Забродин пишет:
Цитата
donatello2005 пишет:
но подскажите пожалуйста, что я делаю не так?


Подсказываю -- вы пытаетесь изобретать велосипед, который уже изобретен.


Модуль платный. Заказчик отказывается выложить нужную сумму.
ответил 05 Янв, 15 от Yorie (100 баллов)
00 голосов
при стоимости работ от 400 рублей за час такое не сделаешь никогда
вы, простите, сколько берёте за труд?
тут даже за еду не получится такое сделать :)
ответил 23 Апр, 15 от Shilen (900 баллов)

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

0 голосов
0 ответов
0 голосов
0 ответов
0 голосов
5 ответов
0 голосов
6 ответов
спросил 18 Сен, 13 от wogich (630 баллов)