20.11.2016 02:23:59 2456

Иногда встречаются сайты, когда, например, в каталоге изображения товаров добавляются то в анонс, то в деталку, то ресайзятся анонсы из деталки, о серьезных проблемах при смене дизайна конечно никто не задумывается.

Чтобы ресайзить изображения в списке товаров при выводе и когда неизвестно, детальная прилетит картинка или аноса, поможет вот этот код в шаблоне компонента в файле result_modifier.php, всю логику максимально пишем в нем, для этого он и создан.

if($arResult["ITEMS"])
{
    foreach($arResult["ITEMS"] as $key => &$arItem)
    {
        $picture = $arItem['PREVIEW_PICTURE'];
        if(!$picture)
            $picture = $arItem['DETAIL_PICTURE'];

        if($picture)
        {
            $arFileTmp = CFile::ResizeImageGet(
                 $picture,
                 array('width' => 170, 'height' => 170),
                 BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
                 true
            );

            if($arFileTmp['src'])
                $arFileTmp['src'] = CUtil::GetAdditionalFileURL($arFileTmp['src'], true);

            $arItem['PICTURE'] = array_change_key_case($arFileTmp, CASE_UPPER);
        }
    }
}

Изображение товара выводим в template.php

<? if($arPicture = $arItem['PICTURE']): ?>
  <a href="<?=$arItem['DETAIL_PAGE_URL']?>"><img
       src="<?=$arPicture['SRC']?>"
       width="<?=$arPicture['WIDTH']?>"
       height="<?=$arPicture['HEIGHT']?>"
       alt="<?=$arItem['NAME']?>"
       title="<?=$arItem['NAME']?>"></a>
<? endif ?>


Пояснения по коду


Здесь мы делаем ресайз изображений Битрикс до заданных размеров

CFile::ResizeImageGet();


Здесь добавляем к адресу файла метку версии файла, иначе хэш, для кэширования картинки в браузере клиента, проверьте, при повторном обновлении страницы список товаров будет заметно быстрее загружаться, практически моментально, т.к. все картинки закэшируются в вашем бразере на компьютере и при повторном запросе браузер их будет брать именно с ПК,  а не с сервера, это самый простой и действенный вариант, когда нет возможности и знаний настраивать сам сервер и различные заголовки.

CUtil::GetAdditionalFileURL();

Результат в самом конце ?14778338342044

/upload/resize_cache/iblock/e00/64_64_190cf9bfc02c81ba0a02cc940d6445018/3.png?14778338342044


А эта php-функция преобразует в верхний регистр ключи массива, чтобы в едином стиле все было

array_change_key_case();