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

Важно

Статья актуальна для CS-Cart 4.12.2 и более новых версий.

Процесс выгрузки

1. Начало сеанса

Этап предназначен для авторизации системы учета на сайте. В ответе на запрос с базовой авторизацией сайт отправляет данные о запущенной сессии.

2. Запрос параметров

На этом этапе система учета запрашивает информацию о возможностях сайта:

  • Поддержка ZIP-файлов. Статус поддержки ZIP-файлов зависит от наличия расширения ZIP в PHP. Расширение является обязательным для работы CS-Cart, поэтому статус поддержки ZIP будет всегда положительным. Однако вы можете явно отключить поддержку ZIP-файлов для CommerceML через файл конфигурации, указав:

    $config['commerceml']['allow_zip'] = false;
    
  • Максимальный размер файла. Размер высчитывается на основе таких настроек PHP, как: upload_max_filesize и post_max_size. Однако вы можете явно указать меньший размер файла для CommerceML через файл конфигурации, указав:

    $config['commerceml']['file_limit'] = '12M';
    

Также на этом этапе проходит ротация файлов с предыдущих сеансов обмена данными и подготовка директории для текущего сеанса: var/files/<company_id>/exim/1C, где <company_id> — идентификатор витрины (в CS-Cart) или продавца (в Multi-Vendor).

3. Выгрузка файлов обмена

На этом этапе система учета выгружает файлы обмена. Файлы сохраняются в директорию var/files/<company_id>/exim/1C. Файлы контента сохраняются в директорию var/files/<company_id>/exim/1C/import_files. Контентными файлами считаются все файлы, расширения которых отличаются от ZIP и XML. Как правило, это изображения товаров.

4. Загрузка данных

Этап разбит на несколько шагов:

  1. Распаковка ZIP-архива

  2. Парсинг XML и конвертация

    На этом этапе все необходимые для импорта сущности конвертируются в DTO и сохраняются в БД для дальнейшего использования. За процесс конвертации отвечают так называемые конверторы. Все конверторы модуля CommerceML расположены в пространстве имен Tygh\Addons\CommerceML\Convertors.

    В модуле CommerceML выделены следующие типы сущностей:

    • ProductDto — для данных о товаре;
    • CategoryDto — для данных о категории;
    • CurrencyDto — для данных о валюте;
    • PriceTypeDto — для данных о типе цен;
    • ProductFeatureDto — для данных о характеристики товара;
    • ProductFeatureVariantDto — для данных о варианте характеристики товара;
    • TaxDto — для данных о типе налог.

    Кроме этого, модуль реализует множество других DTO. Например PropertyDto, который может использоваться для сохранения значения пользовательского свойства товара. Полный список всех DTO вы можете посмотреть в пространстве имен Tygh\Addons\CommerceML\Dto.

  3. Импорт товаров

    Импорт выполняется итерационно с ограничением по времени на одну итерацию — 60 секунд. На этом шаге из БД выбираются товары и все необходимые для импорта товара DTO. За процесс импорта отвечают так называемые импортеры. Все импортеры модуля CommerceML расположены в пространстве имен Tygh\Addons\CommerceML\Importers.

    На процесс импорта влияет большое количество настроек синхронизации. В зависимости от настроек процесс импорта может значительно отличаться.

    Все импортеры стремятся использовать стандартные функции ядра. Так, например, для создания товара будет вызван fn_update_product, что значительно повышает согласованность данных и снимает нагрузку с разработчиков. Теперь не нужно дублировать логику с fn_update_product на CommerceML. Однако это влияет на скорость работы импорта в целом. По завершении всего импорта из БД удаляются все DTO.

    Важно

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

    • Типы цен;
    • Типы налогов;
    • Валюты.

Точки расширения

Cхемы

  • Cml/aliases

    Схема используется для замещения терминов формата CommerceML на термины английского языка в коде. Если схема не покрывает какие-либо термины, вы можете расширить эту схему. Схема используется классом \Tygh\Addons\CommerceML\Xml\SimpleXmlElement, в котором реализованы различные методы для работы с XML.

    Важно

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

  • Cml/callbacks_catalog

    Схема описывает функции-обработчики для отдельных нод-элементов XML-документа.

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

    • $xml — объект типа \Tygh\Addons\CommerceML\Xml\SimpleXmlElement;
    • $import_storage — объект типа Tygh\Addons\CommerceML\Storages\ImportStorage, который реализует методы для работы с хранилищем текущего импорта.

    Путь к XML-элементу — это некоторое подобие xpath, но сильно ограниченное в возможностях. Это связано с тем, что парсинг XML происходит построчно через XMLReader.

    Задача обработчиков — преобразовать/конвертировать $xml в полезные DTO и сохранить их в хранилище импорта.

  • Cml/mappable

    Схема описывает типы сущностей, которые могут быть вручную сопоставлены с типами сущностей в системе учета.

    Интерфейс сопоставления сущностей будет доступен на странице настройки синхронизации.

  • Cml/commands

    Примечание

    Экспериментальная логика, со временем может измениться.

    Обработка запросов от системы учета реализована в виде Command Bus. Схема описывает связь команды с непосредственным обработчиком команды и дает возможность описать middleware, которые могут влиять на обработку команды.

    Потенциально через схему можно повлиять на выполнение таких команд, как:

    • AuthCommand — команда для выполнения авторизации системы учета;
    • UploadImportFileCommand — команда для загрузки файлов от системы учета;
    • CreateImportCommand — команда для создания импорта и выполнения конвертации;
    • UnzipImportFileCommand — команда для распаковки архивов;
    • ExecuteCatalogImportCommand — команда для выполнения импорта товаров;
    • RemoveImportCommand — команда для удаления импорта, например, если он был выполнен только в режиме анализа;
    • CleanUpFilesDirCommand — команда для ротации и очистки директории для файлов учетной системы.
  • Cml/settings

    Схема предназначена для описания настроек обмена данными с системой учета.

    Для добавления своей настройки потребуется расширение схемы, а также вывод настройки в интерфейс. Для этого есть следующие TPL-хуки:

    • commerceml:catalog_settings_main;
    • commerceml:catalog_settings_automatic_matching;
    • commerceml:catalog_settings_additional.

Хуки

  • Commerceml_product_convertor_convert

    Выполняется после конвертации XML-элемента в ProductDto. Позволяет расширить ProductDto пользовательскими данными.

  • Commerceml_category_convertor_convert

    Выполняется после конвертации XML-элемента в CategoryDto. Позволяет расширить CategoryDto пользовательскими данными.

  • Commerceml_price_type_convertor_convert

    Выполняется после конвертации XML-элемента в PriceTypeDto. Позволяет расширить PriceTypeDto пользовательскими данными.

  • Commerceml_product_feature_convertor_convert

    Выполняется после конвертации XML-элемента в ProductFeatureDto. Позволяет расширить ProductFeatureDto пользовательскими данными.

  • Commerceml_product_importer_import_pre

    Выполняет перед тем, как ProductDto будет трансформирован в $product_data и будет вызван fn_update_product. Обратите внимание, что в fn_update_product есть свои хуки. Если вам необходимо изменить сформированный из ProductDto $product_data, то вы можете сделать это в хуке update_product_pre.