Теги

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

    +
    T
    >

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

    25.05.2018 17:05
    09.10.2018 01:38
    2175

    /* Превью

    Пошаговая инструкция по выгрузке товаров из интернет-магазина в форматах RSS 2.0 и YML

    */

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

    Подбираем правильный саундтрек, обычно это может затянутся на долго, но сейчас повезло, не так давно наткнулся на отличного музыканта, правда он уже откинулся, совсем недавно, 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>
          <delivery-options>
              <option cost="500" days="3-5"/>
          </delivery-options>
          <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="3-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");
        

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