2015-09-14 6 views
1

Привет, у меня есть настройка нескольких магазинов magento и есть 2 файла csv, которые будут загружены на ежедневные базы, чтобы обновить цены, количество и другие атрибуты.Программно обновлять атрибуты magento на каждый магазин, но код обновляет все магазины

Я хотел бы создать два из следующих файлов, которые выполняются на cron, и каждый файл будет делать то же самое для каждого магазина отдельно.

В настоящее время данный код принимает взятие store1.csv и применяет его к обоим магазинам, также если я запустил этот код с store3.csv, он будет применять все цены и обновления в обоих магазинах.

Хотела для store1.csv только на обновление магазина 1 и store3.csv только обновление атрибутов магазина 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); 
    } 
?> 

ответ

0

Цена может быть только зернистой, как уровень веб-сайта, не storeview уровня, так что вы будете не сможете устанавливать разные цены для 2 магазинов, которые размещаются на одном сайте.

Qty - это глобальное поле во всех магазинах и веб-сайтах, поэтому также не будет обновляться для каждого отдельного магазина.

Для других атрибутов ознакомьтесь с администрацией: Каталог> Атрибуты> Управление атрибутами и проверьте, какая у них область видимости.

+0

Я пробовал это без везения, любой другой работы или, возможно, указывал мне на рабочий скрипт, а не на модуль, который выполняет эту функцию. Спасибо. – David

+0

эта строка неверна: Mage :: app() -> setCurrentStore (Mage :: getModel ('core/store') -> setStoreId (3)); это должно быть Mage :: app() -> setCurrentStore (3); – PixieMedia

 Смежные вопросы

  • Нет связанных вопросов^_^