Импорт данных в интернет-магазины: алгоритм, который упростит вам жизнь
В предыдущей статье habrahabr.ru/post/209040/ были рассмотрены общие вопросы импорта данных в интернет-магазины, связанные с этим особенности, преимущества и недостатки методов. Можно сделать вывод о том, что единственным эффективным способом в долгосрочной перспективе является разработка собственных модулей импорта данных в каждый интернет-магазин (имеется в виду прямой импорт в базу данных конкретной CMS). Почему? В первую очередь, полностью контролируется код модулей импорта, всегда можно оперативно внести изменения. Второе, что тоже очень важно, — это интеграция модулей в линейку ПО. Что особенного в модулях импорта? Это большое количество параметров, которые влияют на процесс импорта данных. Ниже приведена упрощенная схема алгоритма импорта данных в модулях CatalogLoader.Алгоритм импорта данных в интернет-магазин Реализация На следующем изображении показан стандартный диалог выгрузки из ПО CatalogLoader в OpenCart: Стандартные параметры для OpenCart: — Отключать товары (определяет возможность отключать «исчезнувшие» товары).— Префикс артикулов, которые не нужно обновлять.— Префикс базы данных.— Путь к файлу Catalogloader_handler.php.— Путь к файлу delete_cache.php (характерно именно для OpenCart).Стоит отметить, что стандартный модуль импорта, который предоставляется пользователям, не обладает всем набором параметров, доступных в алгоритме. Это сделано сознательно для того, чтобы не загромождать интерфейс и чтобы у пользователей не возникало дополнительных вопросов. Этих параметров достаточно для подавляющего большинства проектов. И только части необходимы специальные параметры, которые доступны в специальном режиме.
На следующем изображении показан стандартный диалог выгрузки в Битрикс через протокол 1С-Exchange: Особенности: — поддержка протокола 1С-Exchange.— поддержка режима «отладки». Часто этот режим является единственным вариантом импорта в Битрикс.
Принцип алгоритма Принцип алгоритма построен на следующей идее. Входными данными для алгоритма является локальная база данных с новым состоянием интерент-магазина (мы это называем КЛП-базой). Т.е. после завершения процесса импорта КЛП-база «перетечет» в требуемую базу данных CMS. Полностью или нет, с какими-то особенностями или нет — это уже зависит от настроек самого процесса импорта данных, которые определяет пользователь.Ниже приведены техническая информация, которая будет интересна интеграторам и разработчикам, — параметры, которые влияют на ход процесса импорта данных.
CmsEngine строковая переменная [значение по умолчанию (»)]Определяет CMS интернет-магазина. Возможные значения: bitrix, commerceml, magento, insales, prestashop, vamshop, opencart, hostcms, shopcms, shopscript, virtuemart, joomshoping, simpla и т.д.
ModeIsDisable логическая переменная [значение по умолчанию (false)]Включает режим, который будет деактивировать товары, которых нет в нашей КЛП-базе.
DbPrefix строковая переменная [значение по умолчанию (»)]Определяет префикс базы данных интернет-магазина.
HttpTunnelLink строковая переменная [значение по умолчанию (»)]Определяет ссылку, которая служит интерфейсом передачи данных между CatalogLoader и интернет-магазином.Возможные варианты: ссылка на скрипт CatalogLoader_hanpler.php, ссылка на скрипт 1c_exchange.php для передачи по CommerceML протоколу.
HttpTunnelDelay числовая переменная [значение по умолчанию (0)]Определяет задержку между запросами, которые идут на интерфейс, определенный в HttpTunnelLink. Это нужно, если сайт расположен на слабом хостинге и активные действия со стороны CatalogLoader (частые вызовы) останавливают работу сайта (CPU limit, например).
HttpImageWebDownloaderLink строковая переменная [значение по умолчанию (»)]Определяет ссылку на скрипт закачки изображений на хостинг интернет-магазина.Для таких cms, как Битрикс, insales не требуется.
HttpImageWebDownloaderLinkSaveToFile логическая переменная [значение по умолчанию (false)]Запрещает загрузку изображений по интерфейсу, определенному в HttpImageWebDownloaderLink, и сохраняет все параметры вызова этого интерфейса в файл в папке с программой CatalogLoader. Это необходимо, когда стоит потребность отложить загрузку изображений на будущее.
SqlConnectionString строковая переменная [значение по умолчанию (»)]Определяет Connectionстроковая переменная базы данных интернет-магазина. Это позволяет значительно увеличить скорость загрузки данных.строковая переменная ShopUser [значение по умолчанию (»)]Определенный логин пользователя (обычно это админ) в целевом интернет-магазине.Доступно для: bitrix в режиме 1c-exchange, insales.
ShopPassword строковая переменная [значение по умолчанию (»)]Определенный пароль пользователя (обычно это админ) в целевом интернет-магазине.Доступно для: bitrix в режиме 1c-exchange, insales.
CategoryNameForImportAll строковая переменная [значение по умолчанию (»)]Определяет категорию, в которую будут определены все «новые» товары для интернет-магазина. Иногда требуется все новые товары импортировать в категорию «Новинки», а старые товары просто обновлять.Замечание: не работает для bitrix, commerceml.
PriceUpdate логическая переменная [значение по умолчанию (true)]Определяет поведение функции обновления товара, при котором цена товара не изменяется программой CatalogLoader. Это нужно, когда администратор сайта самостоятельно выставляет цены на товар.
MissedProductIsDisabled логическая переменная [значение по умолчанию (true)]Определяет режим деактивации продуктов. Если значение «true», то деактивация продукта означает реальную деактивацию (товар остается в БД и помечается как неактивный), иначе товар будет удален из магазина ПО CatalogLoader. (НЕ ПОНЯЛА)
MissedProductProcess логическая переменная [значение по умолчанию (true)]Определяет поведение функции деактивации товаров. Если значение «true», то товары, которые присутствуют в БД интернет-магазина и отсутствуют в КЛП-файле, будут деактивированы, иначе ни к одному товару, который отсутствует, не будет применена функция деактивации товара.логическая переменная MissedCombinationIsDisabled [значение по умолчанию (true)]Определяет поведение функции деактивации комбинаций товаров. Если значение «true», то комбинации товаров, которые присутствуют в БД интернет-магазина и отсутствуют в КЛП-файле, будут деактивированы, иначе следует удаление из БД.
CustomParameters строковая переменная [значение по умолчанию (»)]Определяются параметры, специфичные для какой-то конкретной CMS. Например, для prestashop значение этого параметра может быть id_lang=7, означающее, что нужно импортировать текстовые данные товаров в язык интернет-магазина под номером семь.
CallUrlOnStart строковая переменная [значение по умолчанию (»)]Определяет http ссылку, которая будет вызвана из ПО CatalogLoader (get запрос) перед стартом процесса импорта. Обычно используется для создания резервной копии БД.
CallUrlOnFinish строковая переменная [значение по умолчанию (»)]Определяет http-ссылку, которая будет вызвана из ПО CatalogLoader (get запрос) после завершения процесса импорта. Обычно используется для очистки кэша или создания резервной копии БД.
ProductsUpdateSkip логическая переменная [значение по умолчанию (false)]Определяет поведение функции обновления товаров. Если установлено значение «false», то для продукта применяется функция обновления, иначе — нет.
CustomerProductSkuTemplate строковая переменная [значение по умолчанию (»)]Определяет шаблон (регулярное выражение), с помощью которого можно определить товар, который был внесен в интернет-магазин вручную, а не через ПО CatalogLoader. Если шаблон определен, то товары, артикул которых подходит под шаблон, исключаются из выборки товаров, к которым должна быть применена функция «Деактивация».Например, CustomerProductSkuTemplate=CUS_
ImagesUpdate логическая переменная [значение по умолчанию (false)]Определяет поведение функции обновления изображений. Если значение «false», то изображения не обновляются, в обратном случае обновляются полностью, при этом предварительно автоматически удаляются все изображения обрабатываемого продукта. Обычно этот параметр необходимо выставлять однократно в «true» при некачественной заливке фотографий в предыдущих итерациях обновления.
ImagesUpdateMissed логическая переменная [значение по умолчанию (false)]Определяет поведение функции обновления изображений. Если значение «false», то изображения не обновляются, иначе обновляются в режиме добавления. Cперва программа определяет изображения, которые уже есть у товара и только после этого добавляет требуемые «новые» изображения товару. Обычно этот параметр необходимо выставлять один раз в «true» при некачественной заливке фотографий в предыдущих итерациях обновления.Доступно для: prestashop.
MiminumProductsCountInSet числовая переменная [значение по умолчанию (0)]Определяет минимальное количество товаров. Если значение параметра больше нуля, то ПО CatalogLoader не начнет работу процесса импорта товаров, если в обрабатываемом КЛП-файле находится меньше товаров, чем определено параметром.
Конечно, везде есть много нюансов, не всегда и не для каждой CMS получается поддержать все параметры алгоритма. Это может быть обусловлено протоколом обмена, архитектурой базы данных или особенностями реализации CMS. Представленный подход позволяет достаточно гибко настраивать процессы импорта данных в интернет-магазины и справляется с большими объемами данных до сотен тысяч позиций.
Данный подход был реализован для импорта данных в следующие CMS:
Николай Кекиш, директор CatalogLoader