Москва
Ереван
Москва

Подмена карточки товара (SKU) для Яндекс.Маркет на 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 является инфоблоки торговых предложений, а не еще один инфоблок каталога. Однако способ рабочий.

Возврат к списку

Нужна помощь?

Укажите контактные данные, опишите задачу и мы перезвоним или ответим на E-mail. Для более оперативного решения напишите на Whatsapp

Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле
Согласитесь с условиями
Спасибо
Ваше сообщение отправлено
Ошибка
Что-то пошло не так. Попробуйте еще раз.

Все статьи в блоге написаны на основе личного опыта и процесса работ. Не многие материалы попадают на сайт, но размещенные играют роль заметок для взаимопомощи. В случае, если требуется помощь с сайтом — можно обратиться через форму выше, страницу Контакты или написать на Whatsapp.

Cайт использует cookie для хранения данных и персонализации контента. Продолжая использовать сайт, Вы даете на это свое согласие.
Понятно