Яндекс.Маркет — сервис сравнения характеристик товаров и их цен. Пользователям доступны подробные описания характеристик товаров, подбор товара по параметрам и быстрый выбор с помощью искусственного интеллекта Гуру и готовых рецептов, сравнение моделей и цен, отзывы покупателей о товарах и магазинах.
Для формирования YML-файла экспорта в Яндекс.Маркет создайте узел в структуре сайта под узлом интернет-магазина (стандартно узел имеет путь /shop/), укажите для созданного узла название раздела, например, yandex_market, заполните основные атрибуты страницы, выберите раздел типовой динамической страницы «Интернет-магазин», страницу «Экспорт в Яндекс.Маркет». Выберите из выпадающего списка магазин, для которого необходимо создать экспорт.
Элемент delivery-options используется для указания стоимости и сроков курьерской доставки по своему региону. Данные, указанные в элементе, показываются на Яндекс.Маркете рядом с каждым предложением вашего магазина. В формате YML элемент <delivery-options> используется вместо элемента <local_delivery_cost>. Если в прайс-листе указаны оба элемента, то при проверке прайс-листа выдается ошибка.
Указание доставки для всех товаров магазина осуществляется в настройках самого магазина. Перейдите в раздел Контент → Интернет-магазины. Отредактируйте магазин и перейдите на вкладку Экспорт. Заполните данные о доставке
Опции доставки содержат следующие значения:
Если требуется у конкретного товара задать индивидуальные настройки доставки, то при редактировании товара, во вкладке Экспорт задаете требуемые настройки.
Опция itemsProperties() контроллера Shop_Controller_YandexMarket
позволяет управлять списком дополнительных свойств, указываемых для товара при экспорте в Яндекс.Маркет.
А коде настроек типовой динамической страницы можно отключить экспорт дополнительных свойств товаров:
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->itemsProperties(FALSE)
->show();
или ограничить список экспортируемых свойств:
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->itemsProperties(array(17, 19))
->show();
Опция itemsForbiddenProperties() контроллера Shop_Controller_YandexMarket
позволяет управлять списком дополнительных свойств, которые требуется исключить при экспорте в Яндекс.Маркет.
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->itemsForbiddenProperties(array(11, 12))
->show();
Опция checkRest(TRUE) позволяет выгружать только те товары, которые присутствуют на складах.
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop); $Shop_Controller_YandexMarket ->checkRest(TRUE) ->show();
Опция priceMode('item'|'shop') изменяет режим формирования цен, по умолчанию цены выгружаются в валюте товара с указанием соответствующей валюты. Для Турбо-страниц имеется потребность выгружать цены в национальной валюте:
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop); $Shop_Controller_YandexMarket ->priceMode('shop') ->show();
* указание priceMode доступно с версии 6.9.7
Опция groupModifications(TRUE) объединяет все предложения, которые являются вариациями одной модели (модификации). * доступно с версии 6.9.3
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop); $Shop_Controller_YandexMarket ->groupModifications(TRUE) ->show();
Опция outlets(TRUE|FALSE|array()) позволяет выводить данные рамках в программы «Забронировать на Маркете». По умолчанию FALSE.
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->outlets(TRUE)
->show();
При указании массива данные будут выводиться только с указанных ID складов (в примере склады с ID 17 и 19:
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->outlets(array(17, 19))
->show();
Пример указания <outlet> в XML для товара:
<offer id="1" available="true">
...
<outlets>
<outlet id="17" instock="10" booking="true"/>
<outlet id="19" instock="23" booking="true"/>
</outlets>
</offer>
* указание outlets доступно с версии 6.7.2
Опция type() контроллера Shop_Controller_YandexMarket
позволяет указать тип товара, по умолчанию 'offer', доступные значения: 'offer', 'vendor.model', 'book', 'audiobook', 'artist.title', 'tour', 'event-ticket'.
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->type('book')
->show();
Стандартно модификации экспортируются совместно с товарами, управлять экспортом модификаций позволяет опция modifications() контроллера Shop_Controller_YandexMarket
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->modifications(FALSE)
->show();
Задайте контроллеру показа опции utm_source() и utm_medium(), при этом автоматически в utm_campaign будет передаваться элемент пути группы товара, а в utm_term — идентификатор товара *.
$Shop_Controller_YandexMarket ->utm_source('yandex_market') ->utm_medium('cpc') ->show();
* передача utm_campaign и utm_term осуществляется с версии 6.8.7.
http://www.yandex.ru/
https://oauth.yandex.ru/client/new
, попадаем на форму регистрации нового приложения. Заполняем поля "Название", "Ссылка на сайт приложения".Партнёрский интерфейс Яндекса и Яндекс.Маркет
1. В файл bootstrap.php, в корне системы, необходимо добавить блок:
/** Yandex.Market **/ Shop_Controller_Yandexmarket_Observer::$campaignId = 1234567; Shop_Controller_Yandexmarket_Observer::$deliveryStatusId = 2; Shop_Controller_Yandexmarket_Observer::$token = 'yyy'; Shop_Controller_Yandexmarket_Observer::$clientId = 'xxxx';
Core_Event::attach('Shop_Payment_System_Handler.onAfterChangedOrder', array('Shop_Controller_Yandexmarket_Observer', 'onAfterChangedOrder'));
Параметр | Описание |
---|---|
$campaignId | Идентификатор кампании на Яндексе (он будет в URL Маркета, в параметре "?id") Не путайте с номером магазина вида "11-XXXXXXXX" |
$deliveryStatusId | Идентификатор статуса заказа "Передано в доставку". Статус создается в системе, в списке статусов заказов. |
$token | Отладочный токен, срок жизни - 365 дней. Получение токена |
$clientId | Идентификатор приложения авторизации в oauth.yandex.ru, созданного на первом шаге |
2. Редактируем узел структуры экспорта в Маркет и в поле "Авторизационный токен" указывает токен, выданный при подключении сервиса покупок на Маркете.
Также позволяется внести токен в коде настроек ТДС экспорта в YML:
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
$Shop_Controller_YandexMarket
->token('xxxxx')
->parseUrl()
->show();
exit();
3. Пример настроек API заказа в партнерском кабинете:
4. Передаем ссылку на YML-файл в покупки.
Яндекс.Маркет имеет ограничение на время генерации YML-файлов, для больших магазинов мы рекомендуем
Разместите в cron/yandexmarket.php файл следующего содержания:
<?php /** * Пример вызова: * /usr/bin/php /var/www/site.ru/httpdocs/cron/yandexmarket.php * Пример вызова с передачей php.ini * /usr/bin/php --php-ini /etc/php.ini /var/www/site.ru/httpdocs/cron/yandexmarket.php * Реальный путь на сервере к корневой директории сайта уточните в службе поддержки хостинга. * * @package HostCMS 6\cron * @version 6.x * @author Hostmake LLC * @copyright © 2005-2018 ООО "Хостмэйк" (Hostmake LLC), https://www.hostcms.ru */ @set_time_limit(9000); ini_set("memory_limit", "512M"); require_once(dirname(__FILE__) . '/../' . 'bootstrap.php'); $aShops = Core_Entity::factory('Shop')->findAll(FALSE); foreach ($aShops as $oShop) { if ($oShop->Shop_Items->getCount()) { $sFilename = "yandexmarket{$oShop->id}.xml"; $oCore_Out_File = new Core_Out_File(); $oCore_Out_File->filePath(CMS_FOLDER . $sFilename); $Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop); $Shop_Controller_YandexMarket->stdOut($oCore_Out_File); $Shop_Controller_YandexMarket->itemsProperties(TRUE); $Shop_Controller_YandexMarket->show(); echo "\nFile {$sFilename} OK"; } }
Далее добавьте в Cron на хостинге вызов данного файла. Проверьте работу, в корневой директории будут создаваться XML-файлы по схеме yandexmarket1.xml, где 1 — идентификатор магазина.
В Яндекс.Маркет добавляете адрес XML-файла, например, http://www.site.ru/yandexmarket1.xml
Подскажите, как вывести в файл обязательный элемент model - название модели? Яндекс требует, а в файле его нет
Он не обязателен, так стандартно используется упрощенный тип формирования offer. В вашем случае, при использовании https://yandex.ru/support/partnermarket/export/vendor-model.html, необходимо:
1. Контроллеру указать свойство ->type('vendor.model')
2. Создать доп.свойство с tag_name "model"
В котором и будете у товаров писать значение для <model>
Нам этот элемент не нужен, т.е. ничего прописывать там не нужно. Можно обойтись в этом случае только пунктом 1.?
При указании vendor.model отдельными тегами будут указываться значения свойств, заданные в массиве $aVendorTags, там, в частности, упоминается model.
Можно ли добавить еще способ который ограничивает экспорт дополнительных свойств только тех, которые не нужно выгружать? А остальные свойства пускай экспортируются по умолчанию.
Если магазин широкого ассортимента, то дополнительных свойств которые нужно выгружать будет намного больше, чем ненужных, и можно нечаянно упустить кое что. А легче запретить ненужные.
С версии 6.9.6 добавлена опция
* - itemsForbiddenProperties(array()) исключать значения дополнительных свойств товаров, по умолчанию array().
В которую передается массив идентификаторов свойств, которые нужно исключить.
Интернет магазин с базовой валютой - рубли. На некоторые товары цены стоят в евро, но пересчитываются в рубли по курсу (товары в интернет магазине на сайте выводятся в рублях). Но при Экспорте в Яндекс.Маркет передаются в евро, как передать в РУБ.?
Для этого нужно будет наследовать контроллер YML и подменять/конвертировать валюту.
Подскажите, пожалуйста, почему в YML файл не попадают дополнительные фото из допсвойства? Другие допсвойства в файле присутстувуют. Есть какие-то ограничения в системе по типу Допсвойства?
На сколько могу судить для требуется одно изображение: https://partner.market.yandex.ru/legal/tt/?ncrnd=3096#id1167389670328
Да, достаточно одного, но можно загрузить до 10.
"Для каждого товарного предложения в элементе можно указать до десяти URL-адресов изображений, соответствующих данному товарному предложению."
Возможно ли Дополнительные фото подгружать через ?
Отлично, всё работает
Сделал как в инструкции. Через браузер страница не открылась, а вот через download mater удалось скачать. Файл вроде правильный но генерация файла заняла почти 5 мин (~1000 позиций 550кб)
Думаю yandex не будет так долго ждать генерацию страницы.
Как можно ускорить?
Проблем с генерацией файла для Яндекс.Маркет не зафиксировано, вероятной причиной может быть медленная работа хостинга. Если система обновлена до последней версии, то рекомендую обратиться в нашу службу поддержки.