Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

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

Может быть полезно для интернет магазинов продающих обои, мебель или нечто подобное- где важно детально показать оттенок цвета или текстуры покупателям.

  • Для каждого торгового предложения товара определить выбранный цвет
  • Получить изображение цвета из Highload-блока
  • Добавить это изображение к массиву фотографий предложения, чтобы оно отображалось как дополнительное фото
Пример вывода цвета среди фотографий

Получение записи с помощью DataClass для Highload-блока

Данный код добавляем в result_modifier.php шаблона детального просмотра элемента каталога (catalog.element):

// Используем пространство имен для работы с 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 из Highload-блока
function getOfferColorFile(string $colorXmlId, $HlDataClass): array
{
    // Выполняем запрос к Highload-блоку, ищем элемент с нужным XML_ID
    $rsData = $HlDataClass::getList(
        [
            'filter' => [
                'UF_XML_ID' => $colorXmlId // фильтр по XML_ID цвета
            ],
            'select' => [
                'UF_FILE' // выбираем поле UF_FILE, в котором хранится ID файла
            ]
            // limit => 1 // не обязательно он итак один
        ]
    )->Fetch(); // получаем первый результат (массив)
    // Получаем полный массив данных файла по его ID
    $filePath = CFile::GetFileArray($rsData['UF_FILE']);
    // Возвращаем массив с информацией о файле (в том числе путь, размеры и др.)
    return $filePath;
}
// Проходим по всем торговым предложениям ($arResult['OFFERS'])
foreach ($arResult['OFFERS'] as $k => $OFFER) {
    // Проверяем, заполнено ли у предложения свойство цвет
    if (!empty($OFFER['PROPERTIES']['COLOR_REF']['VALUE'])) {
        // Получаем файл изображения цвета по XML_ID цвета
        $arColorFile = getOfferColorFile(
            $OFFER['PROPERTIES']['COLOR_REF']['VALUE'], // XML_ID цвета
            $entity_Data_Class // класс для работы с Highload-блоком
        );
        // Добавляем полученное изображение цвета в массив фотографий предложения
        $arResult['OFFERS'][$k]['MORE_PHOTO'][] = $arColorFile;
        // Аналогично добавляем в массив для JS-обработчика (слайдер)
        $arResult['JS_OFFERS'][$k]['SLIDER'][] = $arColorFile;
    }
}

Для работы с данными Highload-блока в PHP используется класс Highloadblock. Мы указываем ID нужного блока (в моем случае — 2) и получаем класс для запросов к нему.

Цвет в Highload-блоке хранится с уникальным идентификатором UF_XML_ID. Чтобы получить изображение этого цвета, используем функцию getOfferColorFile. Эта функция ищет элемент по UF_XML_ID, извлекает ID файла изображения, а затем возвращает массив с данными файла, включая путь к нему.

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

Услуги

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

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

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

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс