如何为magento中的导入产品创建自定义脚本

时间:2014-03-11 07:52:46

标签: magento import magento-1.7

我正在研究magento 1.8版本。 我需要为我的自定义csv文件中的导入产品创建自定义脚本或扩展名,该文件具有一些不同的字段。

任何帮助都会受到很大关注。

由于

2 个答案:

答案 0 :(得分:2)

最好的方法是使用OS Magmi,比脚本快得多,配置简单,定期运行。 http://sourceforge.net/projects/magmi/

您还可以创建一个可以运行的脚本。

  1. 您需要从csv文件获取数据到内存 2将它们转换为数组 每个产品的3个列表数组 4在foreach循环中保存或更新产品。
  2. 一些基本脚本:

    <?php
    
    
    $max_i = 20000; // maximal ammount
    
    
    chdir(dirname(__FILE__)); /
    //error_reporting(E_ALL | E_STRICT);
    //ini_set("display_errors", 1);
    ini_set("memory_limit","1024M");
    ini_set('max_execution_time', 3600000);
    date_default_timezone_set('Europe/Prague');
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }
    
    
    $time_start = microtime_float();
    
    
    
    //////// SKU from CSV
    $csv = file_get_contents ('yourcsvfile.csv'); 
    
    function parse_csv ($csv_string, $delimiter = ";", $skip_empty_lines = true, $trim_fields = true)
    {
        $enc = preg_replace('/(?<!")""/', '!!Q!!', $csv_string);
        $enc = preg_replace_callback(
            '/"(.*?)"/s',
            function ($field) {
                return urlencode(utf8_encode($field[1]));
            },
            $enc
        );
        $lines = preg_split($skip_empty_lines ? ($trim_fields ? '/( *\R)+/s' : '/\R+/s') : '/\R/s', $enc);
        return array_map(
            function ($line) use ($delimiter, $trim_fields) {
                $fields = $trim_fields ? array_map('trim', explode($delimiter, $line)) : explode($delimiter, $line);
                return array_map(
                    function ($field) {
                        return str_replace('!!Q!!', '"', utf8_decode(urldecode($field)));
                    },
                    $fields
                );
            },
            $lines
        );
    }
    // list to array
    $vystup = parse_csv($csv);
    $seznamsku = array();
    foreach ($vystup as $sku) {
      array_push($seznamsku, $sku[0]);
      unset($seznamsku[0]);    
      $seznamskufin = array_filter($seznamsku, 'strlen');  
    };
    
    
    
    require("../../app/Mage.php");
    echo "START ".date('h:i:s')."\n\n";
    Mage::init();
    
    // Set an Admin Session
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    Mage::getSingleton('core/session', array('name' => 'adminhtml'));
    $userModel = Mage::getModel('admin/user');
    $userModel->setUserId(1);
    $session = Mage::getSingleton('admin/session');
    $session->setUser($userModel);
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
    
    
    
    $pocet = 1;
    
    foreach ($seznamskufin as $item) {  
    
    
    
    
        echo "\n number(".$pocet.")..sku(".$item.")..";              
    
    
        $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$item);              
    
        if(is_object($product)) { //if is product exist in Magento            
    
    
    
    
    
    
    
    
    
    
                if (empty($product->getShortDescription())) {  // if is value empty
                    $product->setShortDescription($ZboziDetail['info']);  // write to magento
                    echo "..(importing)..";
                }
                else 
                {
                    echo "..(skipped)..";    // exists
                };
    
    
    
    
    
    
                          $product->save();                          // save to magento
    
                           echo "..saved";
    
    
    
          } else { echo ".(skiped)"; };
    
    
                      unset($item);
                      unset($product);
                      unset($ZboziDetail);
                      unset($product_imageUrl);
                      unset($newimage);
                      unset($e);
                      $pocet++;                                
    };
    
    $time_end = microtime_float();
    $time = $time_end - $time_start;
    
    echo " \n\n All done in ".$time." seconds."; 
    
    
    $logfile = fopen('log.txt', 'a');
    fwrite($logfile, $seznamskufin);
    fclose($logfile);  
    
    unset($response);
    unset($vystup);
    unset($seznamsku);
    unset($seznamskufin);
    ?>
    

答案 1 :(得分:2)

我认为最简单,最安全的方法是创建一个简单的脚本(在Magento之外),将您的csv转换为System->Import/Export->Import中用于导入的csv结构。

要查看您需要的csv格式,请转到System->Import/Export->Export并导出您当前的产品。