Встала задача написать YML для синхронизации с Яндекс Маркетом. Имеем магазинчик на minishop2 в MODX. Можно конечно не полениться/не скупиться и купить платный модуль за 700 рубликов, но дело было вечером, делать было нечего))
Писать буду как реализовал для себя, если кто-то захочет расширить, дополнить данный файлик то информацию можно подчерпнуть у Яндекса https://yandex.ru/support/partnermarket/yml/about-yml.xml.
Итак приступим к созданию YML.xml для ЯндексМаркета)):
1. Создаем ресурс с именем yml, ставим опубликован, не отображать в меню, выбираем пустой шаблон; далее идем настройки - тип содержимого XML, скидываем галку использовать html-редактор. Потом вписываем туда такую конструкцию:
<?xml version="1.0" encoding="windows-1251"?>
<yml_catalog date="[ [time]]" >
<shop>
<name>Название магазина</name>
<company>Название компании</company>
<url>http://site.ru/</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
[ [pdoResources? &parents=`15` &depth=`1` &limit=`1000` &tpl=`categories`]]
</categories>
<offers>
[ [msProducts? &templates=`7` &limit=`10000` &parents=`0` &tpl=`offer` &includeTVs=`image`]]
</offers>
</shop>
</yml_catalog>
У меня структура очень простая: каталог - в ней категория верхнего уровня - там подкатегория, а в ней лежат товары (подойдет для большинства магазинов), если структура другая конечно придется поправить под себя.
В этом коде time это сниппет вывода времени, о нем ниже. Параметры pdoResources: &parents=`15` - это id каталога (самый верхний уровень, где все лежит), &depth=`1` - глубина, limit = лимит и чанк categories. Параметры msProducts: &templates=`7` - это id шаблона, который отвечает за товар, &includeTVs=`image` - это дополнительно TV поле, где изображение (не использовали стандартную галерею). Если захотите вытащить текст из области контента то не забудьте &includeContent=`1`, но лично я использовал longtitle.
Чанк categories будет формировать нам категории. parent:is=`15` это id вашего общего каталога:
<category id="[ [+id]]" [ [+parent:is=`15`:then=``:else=`parentId="[ [+parent]]"`]]>[ [+pagetitle]]</category>
Создаем чанкт offer, он будет формировать нам структуру продуктов (stripString=` ` - этой штучкой убиваем пробел в цене):
<offer id="[ [+id]]" available="[ [+na_sklade]]">
<url>http://site.ru/[ [~[ [+id]]]]</url>
<price>[ [+price:stripString=` `]]</price>
<currencyId>RUR</currencyId>
<categoryId>[ [+parent]]</categoryId>
<picture>http://site.ru/[ [+preview_in_cat]]</picture>
<name>[ [+pagetitle]]</name>
<model>[ [+article]]</model>
<description>[ [+longtitle]]</description>
</offer>
4. Создаем чудесный сниппет, который будет забирать дату с сервера и отображать время файла. Назовем его time и вписываем туда:
echo (date("Y-m-d H:i"));
5. TV параметр na_sklade это переключатель (radio) с возможными значениями:
да==true||нет==false
Ну вот и все, начинаем подключаться к Яндекс Маркету и продавать товары)). Файл, как понимаете, будет доступен по адресу: http://site.ru/yml.xml
Дмитрий:
09 Apr 2018г. в 13:52
Спасибо автору, отличный "бесплатный плагин"))
Иван:
23 Jul 2019г. в 09:53
Вместо http://site.ru можно использовать плюс плюс site_url
А в ссылках на ресурсы можно делать так ?scheme=`full`
Владимир:
13 Sep 2019г. в 17:44
Все сработало. Огромное спасибо. и без платных плагинов.
Диас:
09 Oct 2020г. в 07:44
Добрый день! Подскажите пожалуйста что я сделал не правильно если яндекс при отладке выдает ошибку "Неправильный формат данных в элементе categoryId"
Макс:
20 Nov 2020г. в 22:51
Спасибо автору, отличный пост. Искал в интернете, нашел настройку у другого автора - не рабочая оказалась. Исправил по данному посту - все заработало без проблем.
Алексей:
13 Aug 2021г. в 17:35
Добре!
А есть рецепт вывода нескольких изображений (для турбо-страниц яндекса), а не только одного (главного или превью) ?