Logo-magentoProseguiamo la nostra analisi del software per la creazione di siti di ecommerce Magento:

In questo articolo andremo ad analizzare un semplice script php grazie al quale è possibile effetturare l’aggiornamento delle quantità a magazzino dei prodotti del nostro e-commerce Magento.
Vediamo nel dettaglio le operazioni da seguire:

Il file csv

Per prima cosa andiamo a creare il file “stock.csv” all’interno del quale lo script php andrà a leggere le informazioni sulle quantità dei prodotti da aggiornare. Il file dovrà contenere sulla prima colonna lo SKU del prodotto e sulla seconda la quantità che intendiamo inserire a magazzino. Vediamo un esempio:

120304,1000
394103,50
934843,4000
112332,80

Una volta creato il file andiamo a salvarlo all’interno del nostro spazio web nella cartella “/var/import/“. (La scelta è caduta sulla cartella import di Magento in quanto già provvista degli adeguati permessi di lettura richiesti per l’apertura del file da parte dello script)

Lo script php

Salviamo il codice che segue all’interno di un file denominato “sincroStock.php” e carichiamolo all’interno del nostro spazio web. Sarà sufficiente richiamare questo file dal nostro browser per ottenere, in poco tempo, l’aggiornamento dei prodotti del nostro negozio

define('MAGE_BASE_DIR', realpath(dirname(__FILE__)));
require_once(MAGE_BASE_DIR.'/app/Mage.php');

$file = MAGE_BASE_DIR."/var/import/stock.csv";
$handle = @fopen($file, "r");
if ($handle) {
    require_once(MAGE_BASE_DIR.'/app/Mage.php');
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

    while (!feof($handle)) {
        $linea = fgets($handle);
        $dati = explode(",", $linea);

        $sku = trim($dati[0]);
        $qta = trim($dati[1]);

        $product = Mage::getModel('catalog/product');
        $stockItem = Mage::getModel('cataloginventory/stock_item');

        $productId = $product->getIdBySku($sku);
        if ($productId !== false) {
            $product->load($productId);

            $stockItem->loadByProduct($productId);
            $stockItem->setData('qty', $qta);
            $stockItem->setData('is_in_stock', ($qta > 0) ? 1 : 0);

            try {
                $stockItem->save();
                echo "{$sku} elaborato correttamente.";
            } catch(Exception $e) {
                $countException++;
                echo "{$sku} errore ({$e->getMessage()}).";
            }
        } else {
            echo "{$sku} non trovato.";
        }

        unset($product);
        unset($stockItem);
    }
    fclose($handle);
} else {
    echo "Errore apertura file. ({$file})";
    exit();}