+

MODX Revo | MiniShop2 > Экспортируем товары в Google Merchant и хуяндекс.маркет

25.05.2018 17:05
09.10.2018 01:38
210

! Самое важное !

Подбираем правильный саундтрек, обычно это может затянутся на долго, но сейчас повезло, не так давно наткнулся на отличного музыканта, правда он уже откинулся, совсем недавно, 1.10.2018, так почтим же память замечательного человека!

Настройка Google Merchant

Для подробностей читаем документацию от гугла.
Стоит обратить внимание на обязательные параметры для товаров, они очень специфичны для разных стран, и категорий товаров, по этому я не использовал все.

  1. Создаём страницу со следующийм кодом (Я делал через макет, зачем то..) и указываем тип содержимого XMl

    
      <?xml version="1.0"?>
      <rss version="2.0" 
      xmlns:g="http://base.google.com/ns/1.0">
    
      <channel>
        <title>[[#1.pagetitle]]</title>
        <link>[[++site_url]]</link>
        <description>[[#1.description]]</description>  
    
        [[!msProducts?
          &depth=`10`
          &limit=`9999`
          &parents=`[[+id]]`
          &tpl=`GoogleMerchantItem`
          &includeTVs=`brand,availability`
        ]]
      </channel>
      </rss>
    

    * где #1 (title, description) берём название и описание магазина у страницы с id 1 при помощи приложения pdoTools

  2. GoogleMerchantItem - чанк с позициями (товарами)

    
    <item>
      <title>[[+pagetitle:htmlent]]</title>
      <link>[[~[[+id]]? &scheme=`full`]]</link>
      <description>[[+introtext:htmlent]]</description>
      <g:image_link>http://site.name[[+thumb]]</g:image_link>
      <g:price>[[+price:stripString=` `]]</g:price>
      [[-<g:condition>new</g:condition>-]]
      <g:id>[[+id]]</g:id>
      <g:availability>[[+availability]]</g:availability>
      <g:brand>[[+brand]]</g:brand>
      <g:condition>new</g:condition>
      [[-<g:google_product_category>Категория товара в гугл</g:google_product_category>-]]
    </item>
    

    * Меняем http://site.name на адрес сайта, без слеша
    * Допустимые значения для availability (наличия): in stock [в_наличии] | out of stock [нет_в_наличии] | preorder [предзаказ]
    * condition - состояние товара, new [новый], refurbished [восстановленный], used [б/у]
    * С категориями товаров гуглы вы можете ознакомиться тута, там же можно скачать полный список (огромный)

Прости господи хуяндекс.маркет

  1. Создаём документ с типом содержимого .xml

    
    <?xml version="1.0" encoding="UTF-8"?>
    <yml_catalog date="[[!simple_time]]" >
      <shop>
        <name>[[++site_name]]</name>
        <company>[[++site_name]]</company>
        <url>[[++site_url]]</url>
        <currencies>
          <currency id="RUR" rate="1"/>
        </currencies>
        <categories>
            [[pdoResources?
              &parents=`0`
              &depth=`10`
              &limit=`9999`
              &tpl=`yml_categories`
              &where=`{"class_key":"msCategory"}`
              &showUnpublished=`1`
            ]]
        </categories>
        <offers>
            [[msProducts?
              &templates=`666`
              &depth=`10`
              &limit=`9999`
              &parents=`777`
              &tpl=`yml_offer`
              &includeTVs=`img,model,brend`
            ]]
        </offers>
      </shop>
    </yml_catalog>
        

    * Где меняем 666 на id шаблона для товара, а 777 на id каталога соответственно.

  2. Содержимое чанка yml_categories

    
    <category id="[[+id]]" [[+parent:isnot=`666`:then=`parentId="[[+parent]]"`]]>[[+pagetitle]]</category>
        

    * меняем 666 на id каталога

  3. Чанк yml_offer

    
    <offer id="[[+id]]" available="true">
      <url>[[~[[+id]]? &scheme=`full`]]</url>
      <price>[[+price:stripString=` `]]</price>
      [[+old_price:isnot=`0`:then=`<oldprice>[[+old_price:stripString=` `]]</oldprice>`]]
      <currencyId>RUR</currencyId>
      <categoryId>[[+parent]]</categoryId>
      <delivery-options>
         <option cost="300" days="2-5"/>
      </delivery-options>
      [[-<typePrefix>[[#[[+parent]].pagetitle:htmlent]]</typePrefix>]]
      <vendor>[[+vendor.name:htmlent]]</vendor>
      <model>[[+model:htmlent]]</model>
      <description>[[+introtext:htmlent]]</description>
      <vendorCode>[[+article]]</vendorCode>
      [[-<local_delivery_cost>0</local_delivery_cost>]]
      <manufacturer_warranty>true</manufacturer_warranty>
      <picture>http://site.name[[+thumb]]</picture>
      <name>[[+pagetitle:htmlent]]</name>
      [[!print_props?
        &tpl=`@INLINE:[[+value]]`
        &res_id=`[[+id]]`
      ]]
    </offer>
    

    * Где меняем site.name на адрес сайта, без слеша

  4. Добавляем снипет print_props

        if(empty($tpl) || !$modx->getChunk($tpl)){
            return false;
        }
        $sQuery = "SELECT
        po.value as value,
        o.caption as name
        FROM
        ". $modx->getOption('table_prefix') ."ms2_product_options po
        LEFT JOIN
        ". $modx->getOption('table_prefix') ."ms2_options o ON (po.key = o.key)
        WHERE
        po.product_id = '".$res_id."'";
        $result = $modx->query($sQuery);
        $res = $result->fetchAll(PDO::FETCH_ASSOC);
        $output = "";
        foreach($res as $v){
            $output .= $modx->getChunk($tpl,$v);
        }
        echo $output;
    
  5. Завершающий снипетуля simple_time

        return date("Y-m-d H:i");
      

За код под хуяндекс спасибо безымянному герою, автору этой статейки.
За более тонкой настройкой можете обратиться к документации от хяндекса