将自定义选项(custom options)批量导入Magento

需要导入200个新的产品。这些产品都有3到4个自定义选项。而标准的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.3版的。 老的版本可能会有点不一样。

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

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

在这行上面加入:$custom_options = array();

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

$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 * /

现在移到大概710行的位子,你会看到  $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”出现。(原句 是:Here is a list of the Types, these are taken from the “Custom Options” screen in the Magento admin area. 这里可能翻译有点问题。)

·         field: Field

·         area: Area

·         file: File

·         drop_down: Drop-down

·         radio: Radio Buttons

·         checkbox: Checkbox

·         multiple: Multiple Select

·         date: Date

·         date_time: Date & Time

·         time: Time

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

这里有一个导入格式(原句是:Here’s paired down example of the import format。  对于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

另外你可以为每一个自定义选项值指定一个额外的 价格和 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


----------------------------------------------------------------------------------

我修改了以下部分,可以使产品上传时不会删除已有的自定义选项:

----------------------------------------------------------------------------------

补充说明,上传完表格如果不显示自定义属性:

找到$product->setExcludeUrlRewrite(true);

在下面添加:

$product->setHasOptions(true);

---------------------------------------------------------------------------------

$product->save();

下面添加:

 foreach ($product->getOptions() as $o) {

  $optionTitle[$o->getId()]= $o->getTitle();

}

if(count($custom_options)) {

  foreach($custom_options as $option) {

  if(in_array($option['title'],$optionTitle)){

  //更新

   $originalId = array_search($option['title'],$optionTitle);  

   $opts = Mage::getModel('catalog/product_option');

  $opts->getValueInstance()->deleteValue($originalId);

  $opts->deletePrices($originalId);

   $opts->deleteTitles($originalId);

   $opts->delete();

   try {

$opt = Mage::getModel('catalog/product_option');

$opt->setProduct($product);

$opt->addOption($option);

$opt->saveOptions();

   }

   catch (Exception $e) {}  

  }else{

   try {

$opt = Mage::getModel('catalog/product_option');

$opt->setProduct($product);

$opt->addOption($option);

$opt->saveOptions();

 }

  catch (Exception $e) {}

   }

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值