Меню

Вывести изображения из свойства "Цвет" (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С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...

Удаление недоступных для заказа товаров из корзины

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

Получить список элементов инфоблока с ценами с помощью D7

Задача: использовать D7 в 1С-Битрикс для получения списка элементов инфоблока вместе с их ценами. Это может быть полезно...

Сортировка элементов по индексу сортировки значений типа список

Внутри любого компонента есть заранее заложенные поля для сортировки элементов. Можно сортировать элементы в разных напр...

Добавление в избранное или отложенные, на AJAX из карточки товара

В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "Избранное". Для этого будем исп...

Fancybox в стандартном шаблоне детальной карточки товара, 1С-Битрикс, вместо всплывающего окна и лупы.

Задача: заменить работу с изображениями в стандартном или кастомном шаблоне детальной карточки (catalog.element)...

Информация о службе доставки по ее ID, в 1С-Битрикс

Задача: зная ID службы доставки получить необходимую информацию о ней, с помощью API 1С-Битрикс

Получение доступа к железу устройства из Битрикс мобильное приложение

Документация к мобильному приложению 1С-Битрикс очень куцая. В основном описывает функционал добавляемый BXMobileApp. ...

Получение списка Highload блоков с помощью API Битрикс

1С-Битрикс предоставляет мощный инструментарий для обеспечения эффективной работы ваших проектов. Одним из способов упра...