Автоимпорт из CSV средствами cron'а

#
Автоимпорт из CSV средствами cron'а
Описание скрипта автоматического импорта из CSV.

Основные поля настройки импорта находятся в массиве $_REQUEST['get_param'].

В этом массиве, в самом скрипте, средствами комментариев PHP, описан каждый параметр, однако есть параметры, требующие дополнительных уточнений.

  • параметр import_price_list_images_path отвечает за поле «Путь для внешних файлов» формы стандартного импорта системы. Задавать его нужно, если необходимо, точно так же, как если бы заполнялось поле на форме импорта;
  • параметр file_name отвечает за хранение адреса CSV-файла, который требуется импортировать. Адрес файла должен начинаться со строк «CMS_FOLDER . », это значит, что адресация будет происходить от корневой папки системы HostCMS.

Пример загрузки файла CSV.

Допустим, у нас есть следующий CSV-файл:
«Артикул товара»;«Цена товара»
«art001»;«100.15»


для того, чтобы корректно импортировать данный CSV-файл, необходимо закомментировать ненужные поля.

Пример:
Изначально, массив параметров импорта (параметры, влияющие на импорт, начинаются с 60 строки) имеет следующий вид:
// Идентификатор группы товаров
   'field0' => 'shop_groups_id',
   // Название группы товаров
   'field1' => 'shop_groups_value',
   // Путь для группы
   'field2' => 'shop_groups_path',
   // Порядок сортировки группы
   'field3' => 'shop_groups_order',
   // Описание группы
   'field4' => 'shop_groups_description',
   // SEO Title для группы
   'field5' => 'shop_groups_seo_title',
   // SEO Description для группы
   'field6' => 'shop_groups_seo_description',
   // SEO Keywords для группы
   'field7' => 'shop_groups_seo_keywords',
   // Изображение группы
   'field8' => 'shop_groups_image',
   // Малое изображение группы
   'field9' => 'shop_groups_small_image',
   // CML идентификатор группы
   'field10' => 'shop_groups_cml_id',
   // CML идентификатор родительской группы
   'field11' => 'shop_shop_groups_parent_cml_id',
   // Идентификатор валюты товара
   'field12' => 'shop_currency_id',
   // Идентификатор налога товара
   'field13' => 'shop_tax_id',
   // Идентификатор производителя товара
   'field14' => 'shop_producers_list_id',
   // Название производителя товара
   'field15' => 'shop_producers_list_value',
   // Идентификатор продавца товара
   'field16' => 'shop_shop_sallers_id',
   // Название продавца товара
   'field17' => 'shop_sallers_name',
   // Идентификатор единицы измерения товара
   'field18' => 'shop_mesures_id',
   // Идентификатор товара
   'field19' => 'shop_items_catalog_item_id',
   // Название товара
   'field20' => 'shop_items_catalog_name',
   // Артикул товара
   'field21' => 'shop_items_catalog_marking',
   // Дата создания товара
   'field22' => 'shop_shop_items_catalog_date_time',
   // Описание товара
   'field23' => 'shop_items_catalog_description',
   // Текст товара
   'field24' => 'shop_items_catalog_text',
   // Изображение товара
   'field25' => 'shop_items_catalog_image',
   // Малое изображение товара
   'field26' => 'shop_items_catalog_small_image',
   // Метки товара
   'field27' => 'shop_items_catalog_label',
   // Вес товара
   'field28' => 'shop_items_catalog_weight',
   // Остаток товара на складе
   'field29' => 'shop_items_catalog_rest',
   // Цена товара
   'field30' => 'shop_items_catalog_price',
   // Активность товара
   'field31' => 'shop_items_catalog_is_active',
   // Порядок сортировки товара
   'field32' => 'shop_items_catalog_order',
   // Путь для товара
   'field33' => 'shop_items_catalog_path',
   // SEO Title товара
   'field34' => 'shop_items_catalog_seo_title',
   // SEO Description товара
   'field35' => 'shop_items_catalog_seo_description',
   // SEO Keywords товара
   'field36' => 'shop_items_catalog_seo_keywords',
   // Флаг "Индексировать" для товара
   'field37' => 'shop_items_catalog_indexation',
   // Флаг "Выгружать в Яндекс.Маркет" для товара
   'field38' => 'shop_shop_items_catalog_yandex_market_allow',
   // Флаг "Выгружать в Рамблер.Покупки" для товара
   'field39' => 'shop_shop_items_catalog_rambler_pokupki_allow',
   // Яндекс.Маркет BID
   'field40' => 'shop_shop_items_catalog_yandex_market_bid',
   // Яндекс.Маркет CID
   'field41' => 'shop_shop_items_catalog_yandex_market_cid',
   // Артикул родительского товара
   'field42' => 'shop_item_parent_mark',
   // Текст электронного товара
   'field43' => 'shop_eitems_text',
   // Файл электронного товара
   'field44' => 'shop_eitems_file',
   // Количество электронного товара
   'field45' => 'shop_eitem_count',
   // Дата окончания публикации товара
   'field46' => 'shop_shop_items_catalog_putend_date',
   // Дата начала публикации товара
   'field47' => 'shop_shop_items_catalog_putoff_date',
   // Тип товара
   'field48' => 'shop_shop_items_catalog_type',
   // Дополнительная группа
   'field49' => 'additional_group',
   // Специальная цена "От" для товара
   'field50' => 'shop_special_prices_from',
   // Специальная цена "До" для товара
   'field51' => 'shop_special_prices_to',
   // Специальная цена для товара
   'field52' => 'shop_special_prices_price',
   // Специальная цена для товара (процент)
   'field53' => 'shop_special_prices_percent',
   // CML идентификатор товара
   'field54' => 'shop_items_cml_id',
   // Активность группы товаров
   'field55' => 'shop_groups_activity',


В этом массиве необходимо закомментировать только те строки, которые не участвуют в импорте текущего CSV-файла:
/*   // Идентификатор группы товаров
   'field0' => 'shop_groups_id',
   // Название группы товаров
   'field1' => 'shop_groups_value',
   // Путь для группы
   'field2' => 'shop_groups_path',
   // Порядок сортировки группы
   'field3' => 'shop_groups_order',
   // Описание группы
   'field4' => 'shop_groups_description',
   // SEO Title для группы
   'field5' => 'shop_groups_seo_title',
   // SEO Description для группы
   'field6' => 'shop_groups_seo_description',
   // SEO Keywords для группы
   'field7' => 'shop_groups_seo_keywords',
   // Изображение группы
   'field8' => 'shop_groups_image',
   // Малое изображение группы
   'field9' => 'shop_groups_small_image',
   // CML идентификатор группы
   'field10' => 'shop_groups_cml_id',
   // CML идентификатор родительской группы
   'field11' => 'shop_shop_groups_parent_cml_id',
   // Идентификатор валюты товара
   'field12' => 'shop_currency_id',
   // Идентификатор налога товара
   'field13' => 'shop_tax_id',
   // Идентификатор производителя товара
   'field14' => 'shop_producers_list_id',
   // Название производителя товара
   'field15' => 'shop_producers_list_value',
   // Идентификатор продавца товара
   'field16' => 'shop_shop_sallers_id',
   // Название продавца товара
   'field17' => 'shop_sallers_name',
   // Идентификатор единицы измерения товара
   'field18' => 'shop_mesures_id',
   // Идентификатор товара
   'field19' => 'shop_items_catalog_item_id',
   // Название товара
   'field20' => 'shop_items_catalog_name', */
   // Артикул товара
   'field21' => 'shop_items_catalog_marking',
   // Дата создания товара
/*   'field22' => 'shop_shop_items_catalog_date_time',
   // Описание товара
   'field23' => 'shop_items_catalog_description',
   // Текст товара
   'field24' => 'shop_items_catalog_text',
   // Изображение товара
   'field25' => 'shop_items_catalog_image',
   // Малое изображение товара
   'field26' => 'shop_items_catalog_small_image',
   // Метки товара
   'field27' => 'shop_items_catalog_label',
   // Вес товара
   'field28' => 'shop_items_catalog_weight',
   // Остаток товара на складе
   'field29' => 'shop_items_catalog_rest', */
   // Цена товара
   'field30' => 'shop_items_catalog_price',
   // Активность товара
/*    'field31' => 'shop_items_catalog_is_active',
   // Порядок сортировки товара
   'field32' => 'shop_items_catalog_order',
   // Путь для товара
   'field33' => 'shop_items_catalog_path',
   // SEO Title товара
   'field34' => 'shop_items_catalog_seo_title',
   // SEO Description товара
   'field35' => 'shop_items_catalog_seo_description',
   // SEO Keywords товара
   'field36' => 'shop_items_catalog_seo_keywords',
   // Флаг "Индексировать" для товара
   'field37' => 'shop_items_catalog_indexation',
   // Флаг "Выгружать в Яндекс.Маркет" для товара
   'field38' => 'shop_shop_items_catalog_yandex_market_allow',
   // Флаг "Выгружать в Рамблер.Покупки" для товара
   'field39' => 'shop_shop_items_catalog_rambler_pokupki_allow',
   // Яндекс.Маркет BID
   'field40' => 'shop_shop_items_catalog_yandex_market_bid',
   // Яндекс.Маркет CID
   'field41' => 'shop_shop_items_catalog_yandex_market_cid',
   // Артикул родительского товара
   'field42' => 'shop_item_parent_mark',
   // Текст электронного товара
   'field43' => 'shop_eitems_text',
   // Файл электронного товара
   'field44' => 'shop_eitems_file',
   // Количество электронного товара
   'field45' => 'shop_eitem_count',
   // Дата окончания публикации товара
   'field46' => 'shop_shop_items_catalog_putend_date',
   // Дата начала публикации товара
   'field47' => 'shop_shop_items_catalog_putoff_date',
   // Тип товара
   'field48' => 'shop_shop_items_catalog_type',
   // Дополнительная группа
   'field49' => 'additional_group',
   // Специальная цена "От" для товара
   'field50' => 'shop_special_prices_from',
   // Специальная цена "До" для товара
   'field51' => 'shop_special_prices_to',
   // Специальная цена для товара
   'field52' => 'shop_special_prices_price',
   // Специальная цена для товара (процент)
   'field53' => 'shop_special_prices_percent',
   // CML идентификатор товара
   'field54' => 'shop_items_cml_id',
   // Активность группы товаров
   'field55' => 'shop_groups_activity', */

Таким образом остаются только два поля:
'field21' => 'shop_items_catalog_marking',
'field30' => 'shop_items_catalog_price',

Порядок этих полей должен отражать порядок полей CSV-файла (либо наоборот). Например, если в CSV-файле сначала идет столбец «Артикул товара», а затем столбец «Цена товара», то порядок элеменетов масива такой, как показано выше, если поменять столбцы местами в CSV-файле, то и порядок элементов массива должен изменится на:
'field30' => 'shop_items_catalog_price',
'field21' => 'shop_items_catalog_marking',

Обратите внимание, что field30 и field21 используют индексы 30 и 21 соответственно, однако эти индексы НЕ ВЛИЯЮТ на порядок элементов в массиве. Эти индексы существуют здесь лишь для того, чтобы обеспечить уникальность имен элементов массива и при разборе CSV-файла игнорируются. Истинный порядок расположения элементов массива задается последовательностью записи этих элементов в массив. То есть если элемент
'field30' => 'shop_items_catalog_price'
, будет записан раньше элемента
'field21' => 'shop_items_catalog_marking'
, значит элемент
'field30' => 'shop_items_catalog_price'
, будет идти впереди элемента
'field21' => 'shop_items_catalog_marking',
.

Загрузка дополнительных свойств товара:

Все вышесказанное в равной степени справедливо и для дополнительных свойств каких бы то ни было элементов магазина, будь то товар, или группа товаров (каталог). Единственное отличие в указании имени элемента массива, оно должно соответствовать следующему формату:
'field56' => 'prop-19856'
где prop-19856 содержит идентификатор импортируемого дополнительного свойства товара — 19856. То есть мы говорим обработчику проимпортировать свойство с идентификатором 19856.

Для групп товаров (каталогов) этот формат такой:
'field56' => 'prop_group-19856'
Для цен
'field56' => 'price-19856'
Для складов
'field56' => 'warehouse-9'


Файл auto_import_csv_special.php: http://www.hostcms.ru/download/install/auto_import_csv_special.php

Также необходимо установить обновление с номером 5.9.25.

Для запуска в кроне передайте скрипту один ЛЮБОЙ параметр.
#
Re: Автоимпорт из CSV средствами cron'а
Большое спасибо. Очень помогло.

Замечание для последователей, в настройках есть опция настраивающая нужно ли импортировать первую строку (строка 62):
        // первая строка - название полей?
        'import_price_name_field_f' => 1,
Если мы хотим импортировать эту строку, то нужно не писать не "=> 0", а полностью комментировать строку.


Еще деталь, при импорте не пересчитываются доп.цены. Если хотите чтобы пересчитывалось, вставьте в конец, после include(...), код:
// вставляем новые цены
$query = "SELECT `shop_list_of_prices_id` , `shop_list_of_prices_percent_to_basic` FROM `shop_list_of_prices_table` WHERE `shop_shops_id` = ".$_REQUEST['shop_shops_id'];
$result = $DataBase->select($query);

if ($result) {
   while($row = mysql_fetch_assoc($result)) {
      $price = $row["shop_list_of_prices_id"];
      $perc = ((int)$row["shop_list_of_prices_percent_to_basic"])/100;
      $query = "INSERT INTO shop_prices_to_item_table( shop_items_catalog_item_id, shop_list_of_prices_id, shop_prices_to_item_value )  
SELECT shop_items_catalog_table.shop_items_catalog_item_id, ".$price.", shop_items_catalog_table.shop_items_catalog_price * ".$perc."
FROM `shop_items_catalog_table`
WHERE shop_shops_id = ".$_REQUEST['shop_shops_id'];
      if($DataBase->query($query)) echo "Дополнительные цены обновлены.<br />";
      }
} else {
   echo "Ошибка обновления цен<br />";
   }
Создание сайтов в Хабаровске - http://web-alt.ru
#
Re: Автоимпорт из CSV средствами cron'а
Забыл сказать, само собой класс DataBase нужно объявить:
$DataBase = & singleton('DataBase');
Создание сайтов в Хабаровске - http://web-alt.ru
#
Re: Автоимпорт из CSV средствами cron'а
Прошу пояснить
shushpanchik писал(а):
Файл auto_import_csv_special.php: http://www.hostcms.ru/download/install/auto_import_csv_special.php

Также необходимо установить обновление с номером 5.9.25.

Для запуска в кроне передайте скрипту один ЛЮБОЙ параметр.


1. куда записать файл "auto_import_csv_special.php" чтобы заработал импорт?
2. Подскажите где в документации описано как задать расписание? По SSH доступа у меня нет. В HostCMS есть возможность управлять расписанием из админки?
3. "Для запуска в кроне передайте скрипту один ЛЮБОЙ параметр." - чему передать параметр?

P.S. Обычным cron-ом пользоваться умею, но еще раз хочу заострить внимание, что по SSH меня не пускает.
#
Re: Автоимпорт из CSV средствами cron'а
sir_genry,
1. В корне сайта.
2. Какое расписание? Импорта? Его не существует, используйте средства cron для создания расписания
3. Параметр скрипту, например: php.exe autoimport.php param1 param2 param3
#
Re: Автоимпорт из CSV средствами cron'а
то есть мне все же необходим SSH-доступ для работы с cron-ом?

P.S. большое спасибо за ответы
#
Re: Автоимпорт из CSV средствами cron'а
sir_genry,
да
#
Re: Автоимпорт из CSV средствами cron'а
совсем не обязательно, если в панели управления хостингом предусмотрено управление cron
#
Re: Автоимпорт из CSV средствами cron'а
..
#
Re: Автоимпорт из CSV средствами cron'а
Такой же скрипт для 6 версии можно скачать здесь.
Авторизация