Заполнить картинки разделов каталога из картинок товаров

Просмотров: 4162

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

Более наглядно: перед запуском сайта был произведен обмен с 1С и каталоге более 3000 разделов и подразделов. Так как сайт нужно было запускать срочно, а времени и возможности добавить картинку к каждому разделу не было, но и запускать с "пустыми" картинками не хотелось:

Заполнить картинки разделов каталога из картинок товаров

Принято решение использовать картинку первого попавшегося товара из раздела. При этом сохранив возможность указания своей картинки для раздела.

Заполнить картинки разделов каталога из картинок товаров

Со временем, все картинки будут добавлены и можно будет удалить участок кода отвечающий за "выхватывание" картинки товара.

Получение товара раздела и его картинки

Собственно, все просто: открываем на редактирование шаблон catalog.section.list, который отвечает за отображение разделов плиткой и добавляем в него следующий код.

foreach ($arResult["SECTIONS"] as $arSection) {
	if (!empty($arSection["PICTURE"]['SRC'])) {
	    $sectImg = $arSection["PICTURE"]['SRC'];
	} else {
	    $elWithPicture = CIBlockElement::GetList(
		        array("ID" => "ASC"),
		        array(
		            "IBLOCK_ID" => $arSection['IBLOCK_ID'],
		            "SECTION_ID" => $arSection['ID'],
                            "INCLUDE_SUBSECTIONS" => "Y",
		            "!DETAIL_PICTURE" => false
		        ),
		        false,
		        array('nTopCount' => 1),
		        array('DETAIL_PICTURE')
	        );
	    while ($arPict = $elWithPicture->Fetch()) {
	        $renderImage2 = CFile::ResizeImageGet(
	           	$arPict["DETAIL_PICTURE"], array("width" => 200, "height" => 200), BX_RESIZE_IMAGE_EXACT, false
	        );
	        $sectImg = $renderImage2['src'];
	    }
	    if (empty($sectImg)) {
	        $sectImg = '/local/img/nophoto.jpg';
	    }
	}

	echo $sectImg; // Тут уже верстка
}

Если !empty($arSection["PICTURE"]['SRC']): если у раздела есть картинка, записываем ее в переменную $sectImg и больше ни чего не делаем.

Если картинки нет, с помощью CIBlockElement::GetList получаем товары этого раздела. В фильтре используем параметр "!DETAIL_PICTURE" => false который отберет товары с наличием детальной картинки (так как, не у всех товаров может быть эта картинка).

Так же используем 'nTopCount' => 1, что бы получить только один товар, дабы не вызывать нагрузку и большое количество запросов.

Так как, детальная картинка товара может быть очень большой, что бы не перегружать сеть и не портить производительность сайта используем CFile::ResizeImageGet, меняя размер картинки в 200 на 200 пикселей.

И в переменную $sectImg записываем эту отмасштабированную картинку. Если ни одного товара, с картинкой, нет в разделе- используем заглушку nophoto.jpg

На этом все. Далее используем $sectImg в качестве пути к картинке.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

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

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

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

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

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