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

问题描述 投票:0回答:2

我正在开发 magento 1.8 版本。

我需要创建自定义脚本或扩展程序,以便从具有一些不同字段的自定义 csv 文件导入产品。

php magento import magento-1.7
2个回答
2
投票

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

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

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

一些基本脚本:

<?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);
?>

2
投票

我认为最简单、最安全的方法是创建一个简单的脚本(在 Magento 之外),将 csv 转换为用于在

System->Import/Export->Import
中导入的 csv 结构。

要查看 csv 的格式,您需要转到

System->Import/Export->Export
并导出您当前的产品。

© www.soinside.com 2019 - 2024. All rights reserved.