Может быть полезно для интернет магазинов продающих обои, мебель или нечто подобное- где важно детально показать оттенок цвета или текстуры покупателям.
- Для каждого торгового предложения товара определить выбранный цвет
- Получить изображение цвета из 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 файла изображения, а затем возвращает массив с данными файла, включая путь к нему.
После получения файла изображения для цвета, его нужно вставить в массив предложений и в массив формирования слайдера (если используете штатный слайдер Битрикс).