Бот-информер доступности сайта   •   Магазин расширений
162 просм
0 комм
Поделиться:

Массовый ресайз (изменение размеров) изображений в Bitrix

CMS Bitrix устроена так, что для ускорения загрузки страниц сайта есть возможность вывода не полного оригинального изображения материала, а его превью (анонса). Для каждого типа изображения выставляются свои значения размеров ширины и высоты (делается это в настройках инфоблоков). Вещица весьма полезная, но имеет один очень важный минус: если вы изменили размеры превью в настройках, то внесенные корректировки не коснутся тех материалов, у которых уже есть изображение анонса. То есть новый размер применится только для изображений новых материалов.

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

Конечно, вы можете подправить код сайта (в этой статье мы описали способ программного создания превью на сайте в Bitrix), тем самым также добиться создания превью из полного изображения на вашем сайте. Но сегодня я покажу вам как с помощью одного небольшого скрипта максимально упростить решение поставленной задачи.

Итак, все, что вам нужно – это воспользоваться данным кодом:

CModule::IncludeModule("iblock");

$arOrder = Array(
	"NAME" => "ASC"
);

$arFilter = Array(
	"IBLOCK_ID" => 100, // ID блока
	"ACTIVE" => "Y"
);

$arGroupBy = false;
$arNavStartParams = false;
$arSelectedFields = false;
 
$ItemsList = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectedFields);
 
$el = new CIBlockElement;
 
while($arItem = $ItemsList->Fetch()) {

	if($arItem["DETAIL_PICTURE"] == "") {

		continue;

	}

	$preview_img = CFile::ResizeImageGet($arItem["DETAIL_PICTURE"], Array("width" => ШИРИНА, "height" => ВЫСОТА), BX_RESIZE_IMAGE_EXACT, false);

	$arLoadProductArray = Array(
		"DETAIL_PICTURE" => CFile::MakeFileArray(CFile::GetPath($arItem["DETAIL_PICTURE"])),
		"PREVIEW_PICTURE" => CFile::MakeFileArray($preview_img["src"]),
	);
	
	$res = $el->Update($arItem["ID"], $arLoadProductArray);

}

Во всем этом нас интересуют строчки:

"IBLOCK_ID" => 100, // ID блока

и

$preview_img = CFile::ResizeImageGet($arItem["DETAIL_PICTURE"], array("width" => ШИРИНА, "height" => ВЫСОТА), BX_RESIZE_IMAGE_EXACT, false);

ID блока вы можете узнать по URL, перейдя в корневой раздел. Например, на моем сайте каталог всех товаров имел ID=100.

Массовый ресайз (изменение размеров) изображений в Bitrix

А все доступные параметры для настройки второй строки подробно описаны в этой статье.

Код, описанный выше, вы выполняете в командной PHP-строке (адрес в админке – /bitrix/admin/php_command_line.php?lang=ru):

Массовый ресайз (изменение размеров) изображений в Bitrix

Вставляете (не забывая внести необходимые изменения) и жмете кнопку «Выполнить». Время выполнения скрипта разное, напрямую зависит от количества материалов на вашем сайте и может колебаться от нескольких до 40–50 секунд. В некоторых случаях время выполнения может быть и больше.

0
комментариев
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.