Выгрузка фида небольших магазинов
В статье рассмотрим как создать фид с помощью стандартных сниппетов miniShop2.
Но стоит учитывать, что данный метод предназначен для небольших магазинов! Где кол-во товаров не превышает 3-5 тысяч!
Подразумевается что товары реализованы через minishop2.
- Создаем шаблон, например yml.xml
<?xml version="1.0" encoding="windows-1251"?> <yml_catalog date="[[!+nowdate:default=`now`:strtotime:date=`%Y-%m-%d %H:%M`]]" > <shop> <name>[[++site_name]]</name> <company>[[++site_name]]</company> <url>[[++site_url]]</url> <currencies> <currency id="RUR" rate="1"/> </currencies> <categories> [[pdoResources? &parents=`7` &depth=`10` &limit=`0` &where=`{"template:":16}` &tpl=`categories.yml`]] </categories> <offers> [[msProducts? &parents=`7` &limit=`0` &where=`{"template:":16}` &includeTVs=`seo_h1,seo_desc` &includeThumbs=`medium` &tpl=`offers.yml`]] </offers> </shop> </yml_catalog>
В данном случае мы указываем что ID родителя = 7, глубина выборки 10, без лимита по кол-ву, только страницы с шаблоном 16 (id) и указываем шаблон вывода категорий categories.yml
- Создаем страницу yml.xml
В Настройках страницы выбираем Тип содержимого - XML и замораживаем URL
Выбираем новый шаблон - Создаем чанк categories.yml
<category id="[[+id]]" [[+parent:is=`7`:then=``:else=`parentId="[[+parent]]"`]]>[[+pagetitle]]</category>
Здесь стоит обратить внимание на конструкцию
[[+parent:is=`7`:then=``:else=`parentId="[[+parent]]"`]]
Она нужна для того, что бы указывать вложенность категорий если они вложены не в родителя, вместо 7 здесь у вас будет свой ID родительской категории - Далее мы выводим список всех товаров
<offers> [[msProducts? &parents=`7` &limit=`0` &where=`{"template:=":5}` &includeTVs=`seo_h1,seo_desc` &includeThumbs=`medium` &tpl=`offers.yml`]] </offers>
Здесь мы указываем общую родительскую категорию, лимит, шаблонов товаров (id 5) что бы вы выдачу не попали категории, перечисляем TV которые нам понадобятся в шаблоне товара (они индивидуальны в зависимости от сайта) и указываем шаблон чанка offers.yml - Создаем чанк offers.yml
[[+price:gt=`0`:then=` <offer id="[[+id]]" available="true"> <url>[[++site_url]][[~[[+id]]]]</url> <price>[[+price:stripString=` `]]</price> [[+old_price:notempty=` <oldprice>[[+old_price:stripString=` `]]</oldprice> `:default=` `]] <currencyId>RUR</currencyId> <categoryId>[[+parent]]</categoryId> <picture>https://reshetki-na-okna.ru[[+thumb:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]</picture> <name>[[+pagetitle]]</name> <vendorCode>[[+article]]</vendorCode> [[msProductOptions? &product=`[[+id]]` &onlyOptions=`список_свойств` &tpl=`offers-params.yml` ]] <delivery>true</delivery> <description>[[+description:escape:striptags]]</description> </offer> `:else=` `]] Чанк offers-params.yml {foreach $options as $option} <param name="{$option.caption}" unit="{$option.measure_unit}"> {if $option.value is array} {$option.value | join : ', '} {else} {$option.value} {/if} </param> {/foreach}
Для магазинов с большим кол-вом товаров
Если у вас крупный магазин, то выгрузка должна разбиваться на несколько частей, сразу все товары обработать ваш хостер скорее всего не сможет, для этого вам пригодится пакет modstore.pro/packages/import-and-export/yandexmarket2