Экспорт каталога на торговые площадки - фид, адреса, поля
Собираем товарный фид для площадки и разбираемся, почему она отклоняет позиции или ведёт покупателя не туда.
Решение
Смотрим настроенные профили экспорта:
use Bitrix\Main\Loader;
Loader::includeModule('catalog');$res = CCatalogExport::GetList([], []);while ($export = $res->Fetch()) { printf("%-4s %-24s файл=%s активен=%s\n", $export['ID'], $export['NAME'], $export['FILE_NAME'], $export['ACTIVE']);}Профиль экспорта хранит и настройки отбора, и путь к готовому файлу. Площадка читает именно файл, а не сайт напрямую, и всё, что она видит, определяется моментом последней сборки фида.
Проверяем адреса товаров в готовом файле:
grep -o '<url>[^<]*</url>' /home/bitrix/www/upload/1c_catalog/yml.xml | head -5# адреса должны быть абсолютными и открываться без переадресацийcurl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' 'https://example.com/catalog/tovar/'Адрес в фиде собирается из адреса сайта в настройках и шаблона адреса элемента. Старый домен в настройках даёт фид со ссылками на прежний сайт, и площадка уводит покупателей туда - при полностью работающем магазине.
Смотрим, что попало в выгрузку:
grep -c '<offer ' /home/bitrix/www/upload/1c_catalog/yml.xmlgrep -c '<price>0</price>' /home/bitrix/www/upload/1c_catalog/yml.xmlПозиции без цены и без картинки площадка отклоняет молча, и в отчёте они выглядят как «ошибка данных». Их проще отсечь на стороне сайта условиями отбора, чем разбирать потом в личном кабинете площадки.
Отбираем позиции для выгрузки:
// условия отбора хранятся в профиле экспорта и применяются при сборке$filter = [ 'IBLOCK_ID' => 5, 'ACTIVE' => 'Y', '>CATALOG_PRICE_1' => 0, // без цены площадка позицию не примет '!DETAIL_PICTURE' => false, // и без картинки тоже 'PROPERTY_EXPORT_VALUE' => 'Да', // своё свойство «выгружать на площадку»];Отдельное свойство «выгружать» решает половину вопросов с фидом. Оно даёт управление составом выгрузки контент-менеджеру, а не разработчику, и не требует править профиль экспорта при каждом изменении ассортимента.
Настраиваем пересборку фида по расписанию:
// фид собирает агент: без агентов файл остаётся вчерашнимCAgent::AddAgent('CCatalogExport::PreGenerateExport();', 'catalog', 'N', 86400);// интервал согласуют с частотой смены цен и остатковФид - это снимок каталога на момент сборки. Цены и остатки в нём устаревают до следующего запуска, поэтому частоту пересборки согласуют с тем, как часто меняется каталог.
Обязательные поля у каждой площадки свои, но пересечение всегда одно: название, цена, валюта, категория, картинка и рабочая ссылка. Позицию без любого из них площадка не примет, сколько ни настраивай остальное.
Торговые предложения попадают в фид отдельными позициями. Товар с пятью вариантами даёт пять записей, и площадка считает их разными предложениями со своими ценами и своими ссылками на карточку.
Типичные проблемы
Ссылки из фида ведут на старый домен.
В настройках сайта остался прежний адрес. Фид собирает абсолютные ссылки именно оттуда.
Площадка отклоняет часть позиций.
У них нет цены, картинки или категории. Такие товары отсекают условиями отбора при сборке фида.
Цены в фиде устарели.
Файл не пересобирался. Фид - снимок каталога, и обновляется он только при сборке.
В фид попали служебные разделы.
В отборе указан весь инфоблок. Разделы вроде архива и черновиков исключают явно.
Фид не обновляется по расписанию.
Сборку выполняет агент, а агенты не работают. Проверяют их запуск, а не настройки экспорта.
Частые вопросы
Можно ли отдавать фид сразу, без файла?
Технически да, своим скриптом, но площадка забирает файл по расписанию и большой каталог собирается дольше её тайм-аута. Готовый файл надёжнее.
Как исключить из фида часть товаров?
Условиями отбора в профиле экспорта: по разделу, по свойству, по наличию. Отдельное свойство «выгружать на площадку» - обычное решение.
Нужен ли отдельный фид на каждую площадку?
Да, у площадок разные форматы и разные обязательные поля. Один общий файл обычно устраивает только одну из них.
Почему в фиде цена ниже, чем на сайте?
В выгрузку попала цена другого типа или цена без учёта правил корзины. Тип цены задаётся в настройках профиля экспорта.
Смежное
- Каталог товаров - оглавление подтемы
- Витрина каталога: список раздела, сортировка, фильтр - откуда берутся ссылки на товары
- Свойства торговых предложений: вывод выбора и связь с товаром - варианты как отдельные позиции
- Каталог и продажи - устройство магазина целиком
- Товары на торговой площадке: фид, остатки, заказы обратно - что идёт дальше фида