花费了好多时间,阅读了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

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

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

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

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

  1. $custom_options = array();
  1. /* CUSTOM OPTION CODE */
  2. error_log($field, 3, "my-errors.log");
  3. if(strpos($field,':')!==FALSE && strlen($value)) {
  4. $values=explode('|',$value);
  5. if(count($values)>0) {
  6. @list($title,$type,$is_required,$sort_order) = explode(':',$field);
  7. $title = ucfirst(str_replace('_',' ',$title));
  8. $custom_options[] = array(
  9. 'is_delete'=>0,
  10. 'title'=>$title,
  11. 'previous_group'=>'',
  12. 'previous_type'=>'',
  13. 'type'=>$type,
  14. 'is_require'=>$is_required,
  15. 'sort_order'=>$sort_order,
  16. 'values'=>array()
  17. );
  18. foreach($values as $v) {
  19. $parts = explode(':',$v);
  20. $title = $parts[0];
  21. if(count($parts)>1) {
  22. $price_type = $parts[1];
  23. } else {
  24. $price_type = 'fixed';
  25. }
  26. if(count($parts)>2) {
  27. $price = $parts[2];
  28. } else {
  29. $price =0;
  30. }
  31. if(count($parts)>3) {
  32. $sku = $parts[3];
  33. } else {
  34. $sku='';
  35. }
  36. if(count($parts)>4) {
  37. $sort_order = $parts[4];
  38. } else {
  39. $sort_order = 0;
  40. }
  41. switch($type) {
  42. case 'file':
  43. /* TODO */
  44. break;
  45. case 'field':
  46. case 'area':
  47. $custom_options[count($custom_options) - 1]['max_characters'] = $sort_order;
  48. /* NO BREAK */
  49. case 'date':
  50. case 'date_time':
  51. case 'time':
  52. $custom_options[count($custom_options) - 1]['price_type'] = $price_type;
  53. $custom_options[count($custom_options) - 1]['price'] = $price;
  54. $custom_options[count($custom_options) - 1]['sku'] = $sku;
  55. break;
  56. case 'drop_down':
  57. case 'radio':
  58. case 'checkbox':
  59. case 'multiple':
  60. default:
  61. $custom_options[count($custom_options) - 1]['values'][]=array(
  62. 'is_delete'=>0,
  63. 'title'=>$title,
  64. 'option_type_id'=>-1,
  65. 'price_type'=>$price_type,
  66. 'price'=>$price,
  67. 'sku'=>$sku,
  68. 'sort_order'=>$sort_order,
  69. );
  70. break;
  71. }
  72. }
  73. }
  74. }
  75. /* END CUSTOM OPTION CODE */
  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

magento -- 如何在magento中进行产品的批量上传的更多相关文章

  1. magento批量上传产品

    Step1:表格仔细检查无误后,将准备好的图片上传至 media/import中.如果使用专用的图片服务器,把图片上传到服务器上,当然表格中的图片地址要做相应的修改. Step2:然后,登陆Magen ...

  2. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

  3. ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案

    摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...

  4. 【javascript】html5中使用canvas编写头像上传截取功能

    [javascript]html5中使用canvas编写头像上传截取功能 本人对canvas很是喜欢,于是想仿照新浪微博头像上传功能(前端使用canvas) 本程序目前在谷歌浏览器和火狐浏览器测试可用 ...

  5. vue+element-ui中的图片获取与上传

    vue+element-ui中的图片获取与上传 工作上接触了一下图片的处理,图片的格式是文件流, 记录如下. 请求图片 请求图片的时候,带上{ responseType: 'blob' }, 否则图片 ...

  6. mvc中使用uploadify批量上传的应用

    网上找了很多资料都没有发现一个好用.可以用的uploadify批量上传的应用,这里通过官方和自己的一些项目需要整理了一个出来. 希望能帮助到需要的人. 效果图:

  7. 使用phpExcel批量上传excel表数据到mysql数据库中

    /*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...

  8. 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载

    摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...

  9. python中使用multipart/form-data请求上传文件

    最近测试的接口是上传文件的接口,上传单个文件,我主要使用了2种方法~ 接口例如: URL: http://www.baidu.com/*** method:post 参数: { "salar ...

随机推荐

  1. pyqt 调用颜色选择器

    # -*- coding: utf- -*- from PyQt5.QtWidgets import QApplication, QPushButton, QColorDialog , QWidget ...

  2. Bata冲刺 第一天

    一.冲刺第一天完成任务情况及贡献小时数: 姓名 今日已完成任务 时间(h) 马仲山 代码调整 2 马婧(12) 整理需求文档 2 马婧(13) 整理设计文档 2 马世芳 编写测试文档 2 张俊逸   ...

  3. jq expando && $.data()

    1.使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能 jQuery提供了自己的数据缓存方案,使用jQuery数据缓存方案,我们需要掌握$.da ...

  4. Android手机摄像头编程入门

    本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...

  5. wpf里窗体嵌入winform控件被覆盖问题

      问题1:嵌套Winform控件(ZedGraph)在WPF的ScrollViewer控件上,出现滚动条,无论如何设置该Winform控件都在顶层,滚动滚动条会覆盖其他WPF控件. 解决办法:在Sc ...

  6. android--------根据文件路径加载指定文件

    Android根据指定的文件路径,加载该路径下指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: public class MainActivity exten ...

  7. Confluence 6 设置公共访问

    你可以通过为匿名用户启用 'Use Confluence' 权限来启用匿名用户的站点访问(也称为公共访问) 一个匿名用户的定义为一个不需要登录就可以访问 Confluence 站点.使用 Conflu ...

  8. laravel实现定时器功能

    前记 laravel实现定时器功能有两种方法: 1. 使用 command . 2.   在闭包函数内写实现的方法. 在这里我比较推荐第一种方法,因为第一种方法把具体的实现抽离出来了,看起来简单且富有 ...

  9. Leetcode 113

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  10. 从客户端(......)中检测到有潜在危险的 Request.Form 值

    在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止X ...