zoukankan      html  css  js  c++  java
  • magento -- 如何在magento中进行产品的批量上传

    花费了好多时间,阅读了magento官方论坛上几乎所有的批量上传产品的相关帖子,分析了大量相关magento代码,终于可以完全实现指产品批量上传的功能,免除网速慢,在页面之间跳来跳去,以及重复输入数据的烦恼,你只需要在excel中编辑数据就可以轻松实现产品批量上传到magento站点。

    碰到的常见问题(统统搞定,哈哈):

    多图上传

    上传后magento前台无法查看

    上传后前台看不了图片

    上传后前台只能看到部分图片

    上传后前台的图片有重复

    不能上传custom option(可以支持基于option的price,sku,sort order)

    (注:对外承接产品批量上传服务,1000个产品以下只收60RMB,有需要的可以联系)

    实现步骤:

    1、将所有的产品图片上传到magento/media/import

    2、进入magento管理后台 -- import/export -- profile 选择export all product

    进行基本设定后选择 run profile,你会在magento/var/export下面找到一个文件

    3、以这个文件为模板进行编辑,如果站点是多语言的,要注意一个产品最好是提供各个语言的记录

    4、image,small_image,thumbnail的路径要以/开头

    5、数据文件可以是csv或xml格式,不过顺序要和后台设置相对应

    6、同一个产品的SKU要一致,不同产品的SKU不要重复,magento通过sku来识别某个产品

    7、如果要导入magento的custom option要设定magento产品属性has options为1

    8、custom option在数据文件中要放在最后一列

    9、将数据文件上传到magento的/var/export目录(也可以是var/import),这个取决于你在magento导入导出中import profile中的设置

    10.还是进入magento后台编辑同一个profile,不过将方向修改为import保存后,执行run profile in pop window

    在magento中批量上传产品

    在magento中批量上传产品

    在magento中批量上传产品,magento后台,magento教程

    目前尚未测试的问题(不过应该是可以的):

    上传图片时如何指定各个图片的label

    关于图片上传和custom option的上传都需要我们修改magento的代码,打上补丁才可以的。

    (如需转载,请注明出处 :)

    [php] view plaincopy
     
    1. $custom_options = array();  
    [php] view plaincopy
     
    1.   /* CUSTOM OPTION CODE */  
    2.             error_log($field, 3, "my-errors.log");  
    3.               
    4. if(strpos($field,':')!==FALSE && strlen($value)) {  
    5.    $values=explode('|',$value);  
    6.    if(count($values)>0) {  
    7.       @list($title,$type,$is_required,$sort_order) = explode(':',$field);  
    8.       $title = ucfirst(str_replace('_',' ',$title));  
    9.       $custom_options[] = array(  
    10.          'is_delete'=>0,  
    11.          'title'=>$title,  
    12.          'previous_group'=>'',  
    13.          'previous_type'=>'',  
    14.          'type'=>$type,  
    15.          'is_require'=>$is_required,  
    16.          'sort_order'=>$sort_order,  
    17.          'values'=>array()  
    18.       );  
    19.       foreach($values as $v) {  
    20.          $parts = explode(':',$v);  
    21.          $title = $parts[0];  
    22.          if(count($parts)>1) {  
    23.             $price_type = $parts[1];  
    24.          } else {  
    25.             $price_type = 'fixed';  
    26.          }  
    27.          if(count($parts)>2) {  
    28.             $price = $parts[2];  
    29.          } else {  
    30.             $price =0;  
    31.          }  
    32.          if(count($parts)>3) {  
    33.             $sku = $parts[3];  
    34.          } else {  
    35.             $sku='';  
    36.          }  
    37.          if(count($parts)>4) {  
    38.             $sort_order = $parts[4];  
    39.          } else {  
    40.             $sort_order = 0;  
    41.          }  
    42.          switch($type) {  
    43.             case 'file':  
    44.                /* TODO */  
    45.                break;  
    46.                  
    47.             case 'field':  
    48.             case 'area':  
    49.                $custom_options[count($custom_options) - 1]['max_characters'] = $sort_order;  
    50.                /* NO BREAK */  
    51.                  
    52.             case 'date':  
    53.             case 'date_time':  
    54.             case 'time':  
    55.                $custom_options[count($custom_options) - 1]['price_type'] = $price_type;  
    56.                $custom_options[count($custom_options) - 1]['price'] = $price;  
    57.                $custom_options[count($custom_options) - 1]['sku'] = $sku;  
    58.                break;  
    59.                                             
    60.             case 'drop_down':  
    61.             case 'radio':  
    62.             case 'checkbox':  
    63.             case 'multiple':  
    64.             default:  
    65.                $custom_options[count($custom_options) - 1]['values'][]=array(  
    66.                   'is_delete'=>0,  
    67.                   'title'=>$title,  
    68.                   'option_type_id'=>-1,  
    69.                   'price_type'=>$price_type,  
    70.                   'price'=>$price,  
    71.                   'sku'=>$sku,  
    72.                   'sort_order'=>$sort_order,  
    73.                );  
    74.                break;  
    75.          }  
    76.       }  
    77.    }  
    78. }  
    79. /* END CUSTOM OPTION CODE */  
    [php] view plaincopy
     
    1. /* Remove existing custom options attached to the product */  
    2. foreach ($product->getOptions() as $o) {  
    3.    $o->getValueInstance()->deleteValue($o->getId());  
    4.    $o->deletePrices($o->getId());  
    5.    $o->deleteTitles($o->getId());  
    6.    $o->delete();  
    7. }  
    8. /* Add the custom options specified in the CSV import file */  
    9. if(count($custom_options)) {  
    10.    foreach($custom_options as $option) {  
    11.       try {  
    12.         $opt = Mage::getModel('catalog/product_option');  
    13.         $opt->setProduct($product);  
    14.         $opt->addOption($option);  
    15.         $opt->saveOptions();  
    16.       }  
    17.       catch (Exception $e) {}  
    18.    }  
    19. }  

    补充:实在有太多的人询问相关的问题,所以补充一下常见的问题

    1,注意通常使用的是linux服务器,所以文件名是分大小写的

    2,fieldset和store字段也有碰到大小写的问题

    3,目前打的这个补丁没有对字段中的值处理前置或后续的空格,所以一定要确保你输入的值当中没有空格,否则出错

    4,custom optoin要上传之前要先打好补丁,格式要正确

    5,下面这些字段 是必须的,少一个都会失败,似乎都不能为空(末有时间去一一验证)

    attribute_set category_ids description image is_in_stock name price qty short_description
  • 相关阅读:
    290. Word Pattern
    283. Move Zeroes
    278. First Bad Version
    276. Paint Fence
    270. Closest Binary Search Tree Value
    [jobdu]二进制中1的个数
    [jobdu]丑数
    Skip List
    [wikioi]没有上司的舞会
    POJ3984 迷宫问题
  • 原文地址:https://www.cnblogs.com/focai/p/3878634.html
Copyright © 2011-2022 走看看