Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以编程方式更新每个存储的magento属性,但代码正在更新所有存储_Magento_Opencsv_Inventory Management - Fatal编程技术网

以编程方式更新每个存储的magento属性,但代码正在更新所有存储

以编程方式更新每个存储的magento属性,但代码正在更新所有存储,magento,opencsv,inventory-management,Magento,Opencsv,Inventory Management,你好,我有一个magento多店设置,有2个csv文件,每天都会上传,以更新价格、数量和其他属性 我想创建以下两个在cron上运行的文件,每个文件分别对每个存储执行相同的操作 目前,下面的代码采用store1.csv并将其应用于两个商店。如果我使用store3.csv运行此代码,则将所有价格和更新应用于两个商店 希望store1.csv仅更新store 1,store3.csv仅更新store 3上的属性 <?php /*Move to our working directory

你好,我有一个magento多店设置,有2个csv文件,每天都会上传,以更新价格、数量和其他属性

我想创建以下两个在cron上运行的文件,每个文件分别对每个存储执行相同的操作

目前,下面的代码采用store1.csv并将其应用于两个商店。如果我使用store3.csv运行此代码,则将所有价格和更新应用于两个商店

希望store1.csv仅更新store 1,store3.csv仅更新store 3上的属性

 <?php
 /*Move to our working directory
        $home = getenv("HOME");
        if (! $home) {
                chdir('../'); // We hope we are somewhere where this works
        } else {
                chdir($home.'/project/html');
        }*/
    $csv = "store3.csv";
    if (sizeof($argv) > 1) {
        $csv = $argv[1];
    }
//Turn On Error Reporting
    error_reporting(E_ALL | E_STRICT);
//BOOTSTRAP MAGENTO
    $mageFilename = '../app/Mage.php'; 
    require_once $mageFilename;
    //require_once 'relatedProducts.php';
    Mage::app()->setCurrentStore(Mage::getModel('core/store')->setStoreId(3));
    Mage::setIsDeveloperMode(true);
    umask(0);

//OPEN CSV
    if (($handle = fopen($csv, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 2000, "\t")) !== FALSE) {
            $num = count($data);
            if ($num < 1) continue; // skip blank lines
            $sku = trim($data[0]);
            if ($num < 2) {
              echo "Skipping: ".$sku." not enough fields\n";
              continue;
            }
            $qty = trim($data[1]);
            $price = trim($data[2]);
// grab the product based on sku.
            $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku)->setStoreId(3);
            if(!$product) {
                print "Error:  Invalid SKU, ".$sku."\n";
                continue;
            }
            if ($product->getPrice() != $price) {
              $product->setPrice($price);
              $product->save();
            }
// Grab the inventory(stock) model in order to update quantities.
            $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->setStoreId(3);
            if ($stockItem->getData('qty') != $qty) {
              $stockItem->setData('qty', $qty);
              if ($qty > 0) {
                $stockItem->setData('is_in_stock', 1);
              }
              $stockItem->save();
            }
        }
        fclose($handle);
    }
?>

价格只能与网站级别(而不是storeview级别)一样精确,因此您将无法为位于同一网站的两个StoresView设置不同的价格

数量是所有商店和网站的全局字段,因此也不会为每个商店更新


对于您的其他属性,请查看管理:目录>属性>管理属性,并检查它们的范围。

价格只能与网站级别(而不是storeview级别)一样精确,因此您将无法为位于同一网站中的两个StoresView设置不同的价格

数量是所有商店和网站的全局字段,因此也不会为每个商店更新


对于其他属性,请查看admin:Catalog>attributes>Manage attributes,并检查它们的作用域。

我尝试了此功能,但运气不佳,没有其他解决方法,或者可能会指向一个执行此功能的工作脚本,而不是模块。谢谢。这行是错误的:Mage::app()->setCurrentStore(Mage::getModel('core/store')->setStoreId(3));它应该是Mage::app()->setCurrentStore(3);我尝试了这个,但没有运气,任何其他的解决方法,或者可能会指向一个工作脚本,而不是模块,来实现这个功能。谢谢。这行是错误的:Mage::app()->setCurrentStore(Mage::getModel('core/store')->setStoreId(3));它应该是Mage::app()->setCurrentStore(3);