Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Картинка торгового предложения вместо иконки цвета, в выборе SKU

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

Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового предложения. Если картинки у предложения нет - выводим иконку цвета.

картинку товара SKU вместо иконки цвета

Получаем картинки SKU через API 1С-Битрикс

Открываем на редактирование шаблон детальной карточки catalog.element (внутри шаблона вашего сайта).

Находим участок, который отвечает за вывод и выбор цветов торговых предложений. В штатном шаблоне bootstrap_v4 это, примерно, 334-ая строчка.

Внутри условия if ($skuProperty['SHOW_MODE'] === 'PICT') - кстати, можете найти участок вывода цветов по нему - добавляем:

if ($skuProperty['SHOW_MODE'] === 'PICT') {
    $dbProps = CIBlockElement::GetList(
        false,
        array(
            'IBLOCK_ID' => $arResult['OFFERS']['0']['IBLOCK_ID'],
            'PROPERTY_CML2_LINK' => $arResult['ID'],
            'PROPERTY_COLOR_REF' => $value['XML_ID']
        ),
        false,
        array('nTopCount' => '1'),
        array('DETAIL_PICTURE')
    );
    while ($arFields = $dbProps->Fetch()) {
        if (!empty($arFields["DETAIL_PICTURE"])) {
            $imgPath = CFile::GetPath($arFields["DETAIL_PICTURE"]);
        } else {
            $imgPath = $value['PICT']['SRC'];
        }
    }
    ?>
    <li
        class="product-item-scu-item-color-container"
        data-treevalue="<?= $propertyId ?>_<?= $value['ID'] ?>"
        data-onevalue="<?= $value['ID'] ?>">
        <div class="product-item-scu-item-color-block">
            <div
                class="product-item-scu-item-color"
                style="background-image: url('<?= $imgPath ?>');">
            </div>
        </div>
    </li>
     <?
}

Мы использовали метод CIBlockElement::GetList для получения элементов инфоблока торговых предложений с фильтром:

  • 'IBLOCK_ID' => $arResult['OFFERS']['0']['IBLOCK_ID']: в этом ключе, всегда хранится ID инфоблока с предложениями (по сути, просто ID инфоблока первого предложения, текущего товара)
  • 'PROPERTY_CML2_LINK' => $arResult['ID']: свойство SKU в котором хранится связь предложения с товаром
  • 'PROPERTY_COLOR_REF' => $value['XML_ID']: XML-ID конкретного цвета.

В отборе указали что нам нужен один элемент и от него нужна, только, детальная картинка. Дальше передали путь к картинке предложения в переменную $imgPath.

Если у преложения нет картинки, в переменной $imgPath будет путь к иконке цвета. На этом все, вопросы и уточнения можно задавать в комментариях.

Михаил Базаров 12.11.2022
Тоже самое, на D7
CIBlockElement::GetList аналог на D7
Код
$dbOffers = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
         'select' => ['DETAIL_PICTURE'],
         'filter' => [
               '=IBLOCK_ID' => $arResult['OFFERS']['0']['IBLOCK_ID'],
               '=PROPERTY_CML2_LINK' => $arResult['ID'],
               '=PROPERTY_TSVET' => $value['XML_ID']
          ],
 ])->fetchAll();
foreach ($dbOffers as $dbOffer) {
    if (!empty($dbOffer["DETAIL_PICTURE"])) {
            $imgPath = CFile::GetPath($arFields["DETAIL_PICTURE"]);
    } else {
            $imgPath = $value['PICT']['SRC'];
     }
 }

Если картинки ТП достаточно большие, что бы не перегружать страницу, можно использовать ресайз картинок в нужный размер
Код
$imgPath = CFile::ResizeImageGet(
            $dbOffer["DETAIL_PICTURE"],
            array(
                 'width'=>100, 
                 'height'=>100
           ), 
           BX_RESIZE_IMAGE_PROPORTIONAL_ALT, true
);

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4253 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Следующая/предыдущая новость/статья при просмотре подробной в Битрикс Просмотров: 17541 Дизайн создается только для наглядного и удобного предоставления содержимого сайта, пользо... Оптимизация jpeg и png картинок на cron, с помощью jpegoptim и optipn... Просмотров: 911 Задача: на сайт каждый день проходит выгрузка из 1С с обновлением картинок. Нужно оптимиз... Картинка торгового предложения вместо иконки цвета, в выборе SKU Просмотров: 270 Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового п... Отфильтровать новости в Битрикс за заданный период Просмотров: 15590 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 818 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Denwer c PHP 7.1.8 и MYSQL 5.7 оптимизированный для Битрикс Просмотров: 29517 В последнее время, все чаще приходиться работать на Windows, хотя и не люблю эту ОС- с точ... Почтовое событие на создание нового элемента инфоблока, через API Просмотров: 14341 Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблок... Вывести все товары, с постраничной навигацией, из всех разделов инфоб... Просмотров: 28421 По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 11425 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Помечаем новинки лейблом в каталоге битрикс Просмотров: 20036 Достаточно часто, при разработке каталога товаров или интернет магазина на системе управле... Изменить размер картинок на лету в битрикс Просмотров: 46794 Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздел... Глобальные фильтры на всякие случаи жизни Просмотров: 44563 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Цвета торговых предложений из Highload инфоблоков в списке товаров Просмотров: 14086 Подвернулся на доработку очень старый сайт, работал еще на 11-ой версии Битрикс. Выполнили... Добавление своих полей в почтовые шаблоны Битрикс Просмотров: 43635 Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номе... Дать пользователю возможность быстро отредактировать материал Просмотров: 4365 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Менять большую картинку, при клике на маленькую, в детальной карточке Просмотров: 1764 Мини скриптик, может кому пригодится для каталога товаров или новостей при использовании д... Данные о текущем разделе каталога вывести в section.php Просмотров: 3115 Если нужно получить какие-то данные о текущем разделе, которых нет в изначальном массиве, ... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12061 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Пункты меню из разделов инфоблока Битрикс Просмотров: 90688 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра...