empty basket
Ваша корзина пуста
Выберите в каталоге интересующий товар
и нажмите кнопку «В корзину».
Перейти в каталог
empty delayed
Отложенных товаров нет
Выберите в каталоге интересующий товар
и нажмите кнопку
Перейти в каталог
Заказать звонок
+7 (499) 408 08 75
г. Люберцы, Октябрьский пр-т, 111/119
пн-пт: 10:00-18:00
Заказать звонок

Подмена карточки товара (SKU) для Яндекс.Маркет на Bitrix

29 окт 2022
Активно работая с 1С-Bitrix появилась необходимость работы с Яндекс.Маркет для интернет-магазинов, однако далеко не все магазины оказываются технически готовы к этому. Чаще всего работа с Яндекс.Маркет является не сложной, сайт должен соответствовать правилам системы и генерировать корректный прайс-лист.

Активно работая с 1С-Bitrix появилась необходимость работы с Яндекс.Маркет для интернет-магазинов, однако далеко не все магазины оказываются технически готовы к этому. Чаще всего работа с Яндекс.Маркет является не сложной, сайт должен соответствовать правилам системы и генерировать корректный прайс-лист. К сожалению далеко не всегда возможно выводить корректный прайс-лист из-за изначальной структуры каталога, которую подготовили в момент разработки сайта и должны были учесть.

На нашем примере мы работаем с сайтом, где структуру каталога не учли и поэтому официальный компонент Яндекс.Маркет выгружает некорректный прайс лист, где грузятся все SKU, которые имеют один адрес и при переходе по ссылке у нас показывается дефолтная карточка, на что мы сразу слетаем с Яндекс.Маркета по качеству — ошибка несоответствия цены и карточки предложения. К сожалению ункальный URL для SKU тоже указать нельзя, т.к. его не внесли при формировании каталога товаров для торговых предложений.

Как исправить?

Существует два варианта исправления данной ситуации:

  1. Полностью переделывать структуру каталога для SKU (торговых предложений)
  2. Дорабатывать техническую часть
Так как переработка структуры каталога с более 2000 товарами это достаточно трудоёмкий процесс, на который практически никогда ниукого нет времени, я решил использовать второй вариант.

Подмена карточки товара (SKU) для Яндекс.Маркет на Bitrix позволит отображать корректную карточку товара при входе с прайс-листа. Для этого нам необходимо назначить utm-метку и передать в ней ID торгового предложения из YML:



Теперь нам необходимо принять передаваемый ID торогового предложения сайтом, для этого в зависимости от типа шаблона необходимо добраться до файла компонента catalog.item.

В файле /bitrix/components/*YOUR_TEMPLATE*/catalog.item/component.php:

Внимание, код может отличаться в зависимости от шаблона. Необходимо найти определение параметров (сверху файла)

//set params if empty
    $arParams["PRODUCT_PRICE_CODE"] = empty($arParams["PRODUCT_PRICE_CODE"]) ? array() : $arParams["PRODUCT_PRICE_CODE"];
    $arParams["AVAILABLE_OFFERS"] = empty($arParams["AVAILABLE_OFFERS"]) ? array() : $arParams["AVAILABLE_OFFERS"];
    $arParams["PICTURE_HEIGHT"] = empty($arParams["PICTURE_HEIGHT"]) ? "250" : $arParams["PICTURE_HEIGHT"];
    $arParams["PICTURE_WIDTH"] = empty($arParams["PICTURE_WIDTH"]) ? "250" : $arParams["PICTURE_WIDTH"];
    $arParams["IMAGE_QUALITY"] = empty($arParams["IMAGE_QUALITY"]) ? "80" : $arParams["IMAGE_QUALITY"];
    $arParams["IBLOCK_ID"] = empty($arParams["IBLOCK_ID"]) ?: $arParams["IBLOCK_ID"];


Над ними (примерно на 50-70 строке) вставить:

        /* ID FIX by Guide-Group. (https://ws-home.ru/) */
        if (intval($_GET['utm_source']) > 0) {
            $arParams["PRODUCT_ID"] = intval($_GET['utm_source']);
        }


После данных изменений чистим кэш компонентов. Теперь при переходе по ссылке с UTM_SOURCE=X будет показан корректный ID товара. Однако убедитесь в корректности передаваемых id через utm, чтобы цена и наименования товара соответствовали.

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