Импорт товаров в Magento

Posted on: January 15th, 2012 by Heart 4 Comments »

Задача

Быстро, максимально просто и не имея углубленных знаний системы Magento, импортировать данные о товарах из Excel-файла.

Решение, на практическом примере

Изучаем Excel-файл с данными. Файл содержит информацию о названии товара и цену. Файл отформатирован по категориям. Товаров около 4 тысяч.

Можно написать алгоритм, использующий какую-либо библиотеку с открытым кодом для парсинга excel-файлов, чтобы разобрать источник и взять данные, но т.к. задача одноразовая, более оптимальное решение – это просто скопировать данные ячеек в блокнот (ctrl+c, ctrl+v) Т.к. товары разбиты на категории, одним блоком скопировать нельзя, поэтому копировать пришлось категориями (т.е. это заняло не 10 секунд, а пять минут).

Смотрим что получилось. Получился файл с табуляциями, пробельными символами и прочим мусором, который скопировался из файла-excel.

Для очистки данных в текстовом файле используем Notepad++ Поиск/замена с использованием регулярных выражений. Очищаем лишние пробелы и табуляции, текстовые данные отделяем разделителем – “|”. Данные готовы для использования.

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

Заходим в административную панель Magento и делаем Export одного товара, используя стандартный интерфейс. Смотрим что получилось. Получился csv-файл следующего содержания.

 

sku,_store,_attribute_set,_type,_category,_product_websites,color,cost,country_of_manufacture,created_at,custom_design,custom_design_from,custom_design_to,custom_layout_update,description,enable_googlecheckout,gallery,gift_message_available,has_options,image,image_label,is_imported,manufacturer,media_gallery,meta_description,meta_keyword,meta_title,minimal_price,msrp,msrp_display_actual_price_type,msrp_enabled,name,news_from_date,news_to_date,options_container,page_layout,price,required_options,short_description,small_image,small_image_label,special_from_date,special_price,special_to_date,status,tax_class_id,thumbnail,thumbnail_label,updated_at,url_key,url_path,visibility,weight,qty,min_qty,use_config_min_qty,is_qty_decimal,backorders,use_config_backorders,min_sale_qty,use_config_min_sale_qty,max_sale_qty,use_config_max_sale_qty,is_in_stock,notify_stock_qty,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,stock_status_changed_auto,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,_links_related_sku,_links_related_position,_links_crosssell_sku,_links_crosssell_position,_links_upsell_sku,_links_upsell_position,_associated_sku,_associated_default_qty,_associated_position,_tier_price_website,_tier_price_customer_group,_tier_price_qty,_tier_price_price,_media_attribute_id,_media_image,_media_lable,_media_position,_media_is_disabled
sku-1,,Default,simple,,base,,,,"2011-09-30 10:06:47",,,,,"Bluetooth  JABRA BT2035",1,,,0,,,Нет,,,,,,,,"Использовать настройки конфигурации","Использовать настройки конфигурации","Bluetooth  JABRA BT2035","2011-09-30 00:00:00",,"Блок после информационной колонки",,18.5000,0,"Bluetooth  JABRA BT2035",,,,,,1,2,,,"2011-10-17 20:17:01",,,4,0.0000,100.0000,0.0000,1,0,0,1,1.0000,1,0.0000,1,1,,1,0,1,0,1,0.0000,1,0,,,,,,,,,,,,,,80,,,1,0

Видим, в начале идут заголовки параметров товаров, через запятую, дальше данные о товаре. Отсутствующие параметры остаются пустыми (просто ставится следующая запятая). Если поле содержит несколько слов с пробелом, то данные берутся в кавычки. Строка заголовков и строка данных разделена символом переноса строки и возвратом каретки. Можно заключить, что данные о каждом новом товаре начинаются с новой строки.

Необходимо взять очищенные данные о товарах и сформировать похожий файл для импорта.

Сервер с системой принимает на загрузку файлы не более 2Мб. Данных много, поэтому нужно разбить их на несколько частей, скажем по 500 товаров в файл. Используем интерпретатор php для выполнения следующего кода:

 

<?php
 
$i = 0;
$j = 0;
$products = fopen('products.txt', 'r');
 
$importHeaders = 'sku,_store,_attribute_set,_type,_category,_product_websites,color,cost,country_of_manufacture,created_at,custom_design,custom_design_from,custom_design_to,custom_layout_update,description,enable_googlecheckout,gallery,gift_message_available,has_options,image,image_label,is_imported,manufacturer,media_gallery,meta_description,meta_keyword,meta_title,minimal_price,msrp,msrp_display_actual_price_type,msrp_enabled,name,news_from_date,news_to_date,options_container,page_layout,price,required_options,short_description,small_image,small_image_label,special_from_date,special_price,special_to_date,status,tax_class_id,thumbnail,thumbnail_label,updated_at,url_key,url_path,visibility,weight,qty,min_qty,use_config_min_qty,is_qty_decimal,backorders,use_config_backorders,min_sale_qty,use_config_min_sale_qty,max_sale_qty,use_config_max_sale_qty,is_in_stock,notify_stock_qty,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,stock_status_changed_auto,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,_links_related_sku,_links_related_position,_links_crosssell_sku,_links_crosssell_position,_links_upsell_sku,_links_upsell_position,_associated_sku,_associated_default_qty,_associated_position,_tier_price_website,_tier_price_customer_group,_tier_price_qty,_tier_price_price,_media_attribute_id,_media_image,_media_lable,_media_position,_media_is_disabled';
 
while (!feof($products)) {
  if($j == 0) {
    $csv = fopen('import-files/import' . $i . '.csv', 'a');
    fwrite($csv, $importHeaders . "\r\n");
  }
 
  $buffer = fgets($products, 4096);
  $prodBuf = explode('|', $buffer);
 
  $sku = 'sku-' . $i;
  $date = date("Y-m-d H:i:s");
  $product = $prodBuf[0];
  $price = str_replace(',', '.', str_replace("\r\n", '', $prodBuf[1]));
 
  fwrite($csv, $sku . ',,Default,simple,,base,,,,"' . $date . '",,,,,"' . $product . '",1,,,0,,,Нет,,,,,,,,"Использовать настройки конфигурации","Использовать настройки конфигурации"' .
  ',"' . $product . '","' . $date . '",,"Блок после информационной колонки",,' . $price . '00,0,"' . $product . '",,,,,,1,2,,,"' . $date . '",,,' .
  '4,0.0000,100.0000,0.0000,1,0,0,1,1.0000,1,0.0000,1,1,,1,0,1,0,1,0.0000,1,0,,,,,,,,,,,,,,80,,,1,0' . "\r\n");
 
  $i++;
  $j++;
 
  if($j == 500) {
    fclose($csv);
    $j = 0;
  }
}
 
fclose($products);
fclose($csv);

Зачитываются данные из текстового файла, нужным образом форматируются и создаются csv-файлы.

Далее, используем стандартный механизм импорта Magento, загружая полученные файлы.

4 Responses

  1. Как сделать ексорт 1 товара с определнной категории? Чтобы потом загрузить товары например в категорию биокамины. Експорт товара с этой же категории.

  2. heart says:

    В админ-панели: Система–>Импорт/Экспорт–>Экспорт. Выбираем combobox (тип сущности), products. Появится список атрибутов для фильтрации. Если нужно сделать экспорт одного товара, то можно отфильтровать его по sku (sku можно посмотреть в списке товаров). Ищем Заголовок атрибута – SKU. В колонке Filter вписываем sku-номер товара. Внизу справа жмем кнопку продолжить. Появится окно для сохранения csv-файла.

  3. Julia says:

    Плохо что нет на примере посмотреть мучаюсь уже месЯц немогу разобраться как с екселя можно загрузить товары

    • Admin says:

      Julia, уточните конкретней что вы хотите посмотреть на примере, чтобы можно было вам помочь.

Leave a Reply