最近我需要批量导入几百个新的产品数据,这些产品都有好几个自定义选项(如鞋码、衣服尺寸等)。而标准的Magento导入工具没有导入商品自定义选项的功能;所以我参考了网上的一些资料,据此定制增强Magento导入工具的功能使其允许导入自定义选项(如鞋码、衣服尺寸等)。


要在你的Magento网店中加入这个定制,首先要做的是:

复制\app\code\core\Mage\Catalog\Model\Convert\Adapter\Product.php  这个文件到  
        \app\code\local\Mage\Catalog\Model\Convert\Adapter\Product.php.

这会防止自动更新撤回你的改动。

 
第二步,你需要加入一些代码到 local 那个版本的Product.php下

(code/local/Mage/Catalog/Model/Convert/Adapter/Product.php).

下面的行号是Magento 1.4版的。老的版本可能会有点不一样。

在大约617行的时候你会看到:

foreach ($importData as $field => $value) {

   在这行上面加入

$custom_options = array();

 
在大约625行的时候你会看到:
$attribute = $this->getAttribute($field);
if (!$attribute) {
continue;
}

在 continue 这个语句的上面,需要加入下面这些代码:
 

 

/* CUSTOM OPTION CODE */
if(strpos($field,':')!==FALSE && strlen($value)) {
   $values=explode('|',$value);
   if(count($values)>0) {
      @list($title,$type,$is_required,$sort_order) = explode(':',$field);
      $title = ucfirst(str_replace('_',' ',$title));
      $custom_options[] = array(
         'is_delete'=>0,
         'title'=>$title,
         'previous_group'=>'',
         'previous_type'=>'',
         'type'=>$type,
         'is_require'=>$is_required,
         'sort_order'=>$sort_order,
         'values'=>array()
      );
      foreach($values as $v) {
         $parts = explode(':',$v);
         $title = $parts[0];
         if(count($parts)>1) {
            $price_type = $parts[1];
         } else {
            $price_type = 'fixed';
         }
         if(count($parts)>2) {
            $price = $parts[2];
         } else {
            $price =0;
         }
         if(count($parts)>3) {
            $sku = $parts[3];
         } else {
            $sku='';
         }
         if(count($parts)>4) {
            $sort_order = $parts[4];
         } else {
            $sort_order = 0;
         }
         switch($type) {
            case 'file':             
               break;              
            case 'field':
            case 'area':
               $custom_options[count($custom_options) - 1]['max_characters'] = $sort_order;      
            case 'date':
            case 'date_time':
            case 'time':
               $custom_options[count($custom_options) - 1]['price_type'] = $price_type;
               $custom_options[count($custom_options) - 1]['price'] = $price;
               $custom_options[count($custom_options) - 1]['sku'] = $sku;
               break;                                         
            case 'drop_down':
            case 'radio':
            case 'checkbox':
            case 'multiple':
            default:
               $custom_options[count($custom_options) - 1]['values'][]=array(
                  'is_delete'=>0,
                  'title'=>$title,
                  'option_type_id'=>-1,
                  'price_type'=>$price_type,
                  'price'=>$price,
                  'sku'=>$sku,
                  'sort_order'=>$sort_order,
               );
               break;
         }
      }
   }
}
/* END CUSTOM OPTION CODE */

现在移到大概777行的位子,你会看到
$product->save();

就在这后面,加入下面的代码:
 

foreach ($product->getOptions() as $o) {
   $o->getValueInstance()->deletue($o->getId());
   $o->deletePrices($o->getId());
   $o->deleteTitles($o->getId());
   $o->delete();
}

if(count($custom_options)) {
   foreach($custom_options as $option) {
      try {
        $opt = Mage::getModel('catalog/product_option');
        $opt->setProduct($product);
        $opt->addOption($option);
        $opt->saveOptions();
      }
      catch (Exception $e) {}
   }
}

就是这样了,现在一切就绪准备导入自定义产品选项了。

要导入一个自定义选项,你需要在你的CSV导入文件中添加新的一列。新列的名字决定了该选项的名称和类型。格式应该是: Name:Type:Is Required.   (名称:类型:是否必需)。例如,要创建一个必需的下拉式选项,名称为“Size”,那么列标题应该为: Size:drop_down:1  (1表示必需,0表示可选) 这是类型的一列。他们会在Magento 管理员界面中的"cumstom options"出现。

而类型一般都有多种值(drop_down下拉式, radio单选, checkbox复选框, multiple复合式),你可以用一个|的分隔符来指定多种值。 例如:小,中,大   你可以用 "小|中|大" 作为你csv文件里 "Size:drop_down:1" 一列的值。

这里有一个导入格式(对于paried down 可以理解为用逗号分开的相对应的列标题和值):      sku,       name,       description,     price,   Size:drop_down:1     T-Shirt1,  T-Shirt,       A T-Shirt,      5.00,    Small|Medium|Large     T-Shirt2,  T-Shirt2,   Another T-Shirt,   6.00,     XS|S|M|L|XL 注意:还要设置has_options 值为1 .

另外,你还可以为每一个自定义选项值指定一个额外的价格和SKU 这个的语句是这样的: Value:[fixed|percent]:price_modifier 例如,假设你有一个产品,如果是中号的话,价格会上涨5元,如果是大号的话,上涨10元,你就可以用下面的值作为一个自定义选项的值: Small|Medium:fixed:5|Large:fixed:10

在第一个例子加上额外的 价格/SKU 后变成:     —————————————————————————–     sku,      name,    description,      price,   Size:drop_down:1     T-Shirt1, T-Shirt,  A T-Shirt,       5.00,    Small:fixed:0:-SM|Medium:percent:2:-MED|Large:percent:3:-LRG     T-Shirt2, T-Shirt2, Another T-Shirt, 6.00,  XS:fixed:0:-XS|S:fixed:0:-S|M:fixed:1:-M|L:fixed:1:-L|XL:fixed:2:-XL     ------------------------------------------------ 这有一个CSV文件的样本,我常用来当作模板导入含有鞋码、衣服尺寸的产品数据。

我希望这个修正功能对那些需要导入产品自定义选项的人有所帮助。