Вывести изображения из свойства "Цвет" (HL блок) в дополнительных картинках торговых предложений

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Вывести изображения из свойства "Цвет" (HL блок) в дополнительных картинках торговых предложений

Задача: в SKU, у которых есть свойство "Цвет" нужно вывести картинку цвета в дополнительные
фотографии и в слайдер. Цвет хранится в Highload-блоке, каждому цвету соответствует изображение файла
(например, фото цвета или образца).
Вариант кода без использования функции, получение массива файлов до добавления в предложения.

С использованием функции: для каждого предложения вызывается getOfferColor(), которая выполняет запрос к базе, что увеличивает общее время обработки, особенно при большом количестве предложений.

Без функции (вариант с предварительной загрузкой): все данные загружаются один раз, и далее просто осуществляется поиск в массиве — быстрее и эффективнее.
Код
// Используем пространство имен для работы с Highload-блоками Bitrix
use Bitrix\Highloadblock as HL;

// Получаем объект класса DataClass для работы с конкретным Highload-блоком по его ID (здесь ID 2)
$entity_Data_Class = HL\HighloadBlockTable::compileEntity(
    HL\HighloadBlockTable::getById(2)->fetch()
)->getDataClass();

// Создаем массив для хранения соответствий XML_ID цвета и файла изображения
$colorFilesMap = [];

// Получаем все элементы Highload-блока для предварительной обработки
$rsColors = $entity_Data_Class::getList([
    'select' => ['UF_XML_ID', 'UF_FILE']
]);

// Заполняем массив соответствий: XML_ID => данные файла
while ($colorData = $rsColors->fetch()) {
    if (!empty($colorData['UF_FILE'])) {
        $colorFilesMap[$colorData['UF_XML_ID']] = CFile::GetFileArray($colorData['UF_FILE']);
    }
}

// Теперь обходим торговые предложения и добавляем изображения по необходимости
foreach ($arResult['OFFERS'] as $k => $offer) {
    if (!empty($offer['PROPERTIES']['COLOR_REF']['VALUE'])) {
        $xmlId = $offer['PROPERTIES']['COLOR_REF']['VALUE'];
        // Проверяем, есть ли изображение для этого цвета
        if (isset($colorFilesMap[$xmlId])) {
            $arColorFile = $colorFilesMap[$xmlId];
            // Добавляем изображение в массив фото
            $arResult['OFFERS'][$k]['MORE_PHOTO'][] = $arColorFile;
            // Добавляем изображение в массив для JS-обработчика
            $arResult['JS_OFFERS'][$k]['SLIDER'][] = $arColorFile;
        }
    }
}
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

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

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

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

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

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

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

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

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

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

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

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

от 300 000 руб. от 2-х недель

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

Инфоресурс

от 300 000 руб. от 4-х недель

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

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.