YML для MODX revo и minishop2

Встала задача написать 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


Комментарии (6)

  1. Дмитрий:
    09 Apr 2018г. в 13:52

    Спасибо автору, отличный "бесплатный плагин"))

  2. Иван:
    23 Jul 2019г. в 09:53

    Вместо http://site.ru можно использовать плюс плюс site_url
    А в ссылках на ресурсы можно делать так ?scheme=`full`

  3. Владимир:
    13 Sep 2019г. в 17:44

    Все сработало. Огромное спасибо. и без платных плагинов.

  4. Диас:
    09 Oct 2020г. в 07:44

    Добрый день! Подскажите пожалуйста что я сделал не правильно если яндекс при отладке выдает ошибку "Неправильный формат данных в элементе categoryId"

  5. Макс:
    20 Nov 2020г. в 22:51

    Спасибо автору, отличный пост. Искал в интернете, нашел настройку у другого автора - не рабочая оказалась. Исправил по данному посту - все заработало без проблем.

  6. Алексей:
    13 Aug 2021г. в 17:35

    Добре!
    А есть рецепт вывода нескольких изображений (для турбо-страниц яндекса), а не только одного (главного или превью) ?



Разрешённые теги: <b><i><br>Добавить новый комментарий:


Создание сайтов в студии go-up.info