Уменьшение изображений в result_modifier.php

Уменьшение изображений в result_modifier.php

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

Один из вариантов решения - настройка информационного блока. Можно установить настройки изменения размера для загружаемых изображений. Но что если потребуется в одном месте выводить изображение, например, с шириной 100 пикселей, а в ленте с шириной 60 пикселей? В таком случае мы можем менять размер изображения в файле result_modifier.php компонента news.list или любого другого, работающего с выборкой из информационных блоков. Содержимое файла result_modifier.php для компонента bitrix:news.list будет следующим:

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
foreach($arResult["ITEMS"] as $i=>$arItem) {
	if (is_array($arItem["PREVIEW_PICTURE"])) {
                $ratio = $arItem["PREVIEW_PICTURE"]["WIDTH"] / $arItem["PREVIEW_PICTURE"]["HEIGHT"];
		$width = 250;
		$height = round($width / $ratio);
		$img = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array("width" => $width, "height" => $height), BX_RESIZE_IMAGE_EXACT);
		$arResult["ITEMS"][$i]["PREVIEW_PICTURE"]["SRC"] = $img["src"];
		$arResult["ITEMS"][$i]["PREVIEW_PICTURE"]["WIDTH"] = $width;
		$arResult["ITEMS"][$i]["PREVIEW_PICTURE"]["HEIGHT"] = $height;
	}
}

Теперь все превью файлы будут уменьшаться до 250 пикселей в ширину. Высота высчитывается автоматически.

Функция CFile::ResizeImageGet создает уменьшенную версию изображения всего 1 раз, при повторном обращении функция просто возвращает массив с путем до уменьшенной версии изображения. Данный сниппет можно доработать, например, вынести параметр $width в настройки компонента (файл .parameters.php в папке шаблона).

Как видно файл result_modifier.php позволяет решить множество различных задач. В будущем мы рассмотрим связку файла result_modifier.php с .parameters.php, на примере доработки этого сниппета.

 1327 Битрикс, Разработка, Сниппет, result_modifier.php, .parameters.php
27 мая 2015
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Возможно Вам будет интересно

Комментарии

Чтобы оставлять комментарии необходимо зарегистрироваться и пройти авторизацию.