使用单个SKU导入多尺寸产品

时间:2014-05-30 06:01:34

标签: drupal drupal-commerce csv-import drupal-feeds

我经常安装Drupal Commerce,其中包含已安装的Feeds,Feeds Tamper和Commerce Feeds模块。 以下是我尝试导入的CSV文件的一小部分:

SKU,Title,Price,Sizes,Model
JKR122/1,Red T-Shirt,44,"42,44,46",JKR122
JKR122/2,Blue T-Shirt,44,"42,44,46",JKR122

是否可以使用Feeds Tamper,爆炸"尺寸"列并将每个导入为单独的产品。可能需要将爆炸尺寸附加到SKU。

我在Excel中没有专业版,所以如果可以轻松地重新格式化这个巨大的CSV文件,请告诉我如何。

1 个答案:

答案 0 :(得分:0)

由于今天必须解决问题,我编写了PHP脚本,它重新格式化了我的CSV:

我会打开问题,以防无人知道这是否可以通过" Drupal-way"。

<?php

define('ATTR_SIZE', 'Sizes');
define('ATTR_SKU', 'SKU');
define('IMPORT_FILE', 'import_file.csv');
define('EXPORT_FILE', 'export_file.csv');
define('CSV_DELIMITER', ',');

// Open csv
if(!file_exists(IMPORT_FILE) || !is_readable(IMPORT_FILE))
  die('Check file');

$header = NULL;
$all_rows = array();

if (($handle = fopen(IMPORT_FILE, 'r')) !== FALSE) {
  while (($row = fgetcsv($handle, 1000, CSV_DELIMITER)) !== FALSE) {
    if (!$header)
      $header = $row;
    else
      $all_rows[] = array_combine($header, $row);
  }
  fclose($handle);
}

// Process csv
$new_rows = array();

foreach ($all_rows as $key => $row) {
  if (!empty($row[ATTR_SIZE])) {
    $original_row = $row;
    $sizes = explode(',', $row[ATTR_SIZE]);

    foreach ($sizes as $size) {
      $trimmed_size = trim($size);

      if (!empty($trimmed_size)) {
        $row = $original_row;
        $row[ATTR_SIZE] = $trimmed_size; // Save size
        $row[ATTR_SKU] = $row[ATTR_SKU] . '/' . $trimmed_size; // Modify SKU
        $new_rows[] = $row; // Add new row
      }
    }
  }
  else {
    $new_rows[] = $row;
  }
}

// Save csv
$header = NULL;
$handle = fopen(EXPORT_FILE, 'w');

foreach ($new_rows as $fields) {
  if (!$header) {
    fputcsv($handle, array_keys($fields));
    $header = TRUE;
  }
  fputcsv($handle, $fields);
}
fclose($handle);