Выгрузка товаров

05 мая 2019, 07:00

Выгрузка товаров из интернет-магазина в RetailCRM

Описание

RetailCRM позволяет и рекомендует размещать собственный каталог товаров внутри CRM. Это требуется для более комфортной работы с товарами внутри CRM, для статистики и аналитики продаж конкретных товаров. Ну и я молчу про остатки, связи товаров и т.п.

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

Для связи каталога интернет-магазина и стороннего сервиса давно уже придумана XML выгрузка, как, к примеру в Яндекс-Маркете. Также поступает и RetailCRM. В чем суть?

  1. Мы создаем на сайте XML страницу или отдельный XML файл в котором определенным образом описываем перечень товарных категорий и товаров
  2. В RetailCRM указываем ссылку на наш XML файл
  3. RetailCRM парсит товары к себе в базу, при чем постоянно синхронизируется с сайтом (раз в сутки по-моему), таким образом список актуальных товаров и цен всегда совпадает.

Формат ICML (выдержка из официальной документации)

Формат ICML является расширением формата YML. Он позволяет выгружать техническую информацию о товарах в систему (ID и XML ID товаров, информация об остатках), а также сложную структуру каталогов с торговыми предложениями (SKU). Вы можете генерировать файл выгрузки самостоятельно на стороне вашего интернет-магазина в соответствии с описанием ниже. Для ряда CMS есть готовые модули интеграции, которые умеют генерировать ICML с каталогом товаров.

Официальная документация по ICML

Пошаговое руководство

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

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

Перед настройкой важно узнать, что если у вас уже есть YML файл (XML выгрузка для Яндекс маркета) - можно попробовать скормить ее CRM - скорее всего дальнейшие действия нам не понадобятся. Если же нет, или Вы хотите строго придерживаться рекомендаций RetailCRM - читаем дальше.

  • Создаем в админке страницу ICML, отключаем для нее текстовый редактор, назначаем пустой шаблон и выбираем тип содержимого XML. Сохраняем
  • Пишем в содержимом ресурса код примерно следующего содержания.
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="{"" | date : "Y-m-d H:i:s"}">
    <shop>
        <name>{'site_name' | option}</name>
        <company>{'site_name' | option}</company>
        <url>{'site_url' | option}</url>
        <currencies>
            <currency id="RUB" rate="1"/>
        </currencies>
        <categories>
            {'!pdoResources' | snippet : [
                'parents' => 0,
                'level' => 10,
                'limit' => 0,
                'showHidden' => 1,
                'where' => ['class_key' => 'msCategory'],
                'sortby' => 'id',
                'tpl' => '@INLINE <category id="{$id}" parentId="{$parent}">{$pagetitle}</category>'
            ]}
        </categories>
        <offers>
            {'!msProducts' | snippet : [
                'parents' => 0,
                'level' => 10,
                'limit' => 0,
                'tpl' => '@INLINE
                    <offer id="{$id}" productId="{$id}" available="true">
                        <url>{$id | url : ["scheme" => "full"]}</url>
                        <price>{$price | replace : " " : ""}</price>
                        <categoryId>{$parent}</categoryId>
                        {if $old_price > 0}<oldprice>{$old_price  | replace : " " : ""}</oldprice>{/if}
                        <currencyId>RUB</currencyId>
                        <vendor>{$_pls["vendor.name"]}</vendor>
                        <manufacturer_warranty>true</manufacturer_warranty>
                        <picture>{"site_url" | config | replace : "ru/" : "ru"}{$image}</picture>
                        <name>{$pagetitle}</name>
                    </offer>
                '
            ]}
        </offers>
    </shop>
</yml_catalog>

Такой код всего за два обращения должен сгенирировать полный XML каталог вашего интернет-магазина. Не забудьте открыть страницу и посмотреть что получилось.

  • Следующий шаг - настройка RetailCRM. Переходим в личный кабинет "Администрирование - Магазины - Магазин - вкладка Каталог" В форме указываем ссылку на нашу ICML страницу в поле URL ICML-файла, созданную шагом ранее. Ставим отметку Загрузить каталог из ICML сейчас. Жмем кнопку "Сохранить" и через несколько минут (в зависимости от размера каталога) обновляем страницу. Если RetailCRM в процессе автоматического чтения каталога обнаружит ошибки, она выдаст об этом предупреждение. Если все нормально - переходим в раздел Операционная деятельность - Товары и видим наши товары

Возможные проблемы

  1. Вы выполнили первый и второй шаг - но на странице только белый экран. В первую очередь стоит проверить, активна ли системная настройка Использовать Fenom на страницах Важно понимать, что если если Ваш сайт изготовлен без использования шаблонизатора Fenom то включение данной системной настройки может сломать сайт. В таком случае лучше проконсультироваться со специалистом или переписать мой пример с использованием классического синтаксиса MODX.

  2. Страница открывается но - на ней ничего нет, кроме даты и названия магазина. Это значит что не сработала выборка категорий\товаров. Перепроверьте еще раз. Особое внимание обратите на параметры parents и showHidden

  3. Страница долго загружается и показывает 500-ую ошибку. Ваш каталог - слишком большой и сервер не успевает его сгенерировать за 30 секунд. В таком случае Вам нужно не генерировать каталог на лету, а физически создать XML файл и через консоль сделать в него запись.


Предыдущий документ
Выгрузка заказов
Следующий документ
Выгрузка пользователей