Riportiamo in questo articolo l’esperienza su un progetto di importazione dati da un gestionale verso magento che utilizza in export file DBF per l’importazione di prodotti configurabili e categorie su Magento.

Per poter leggere e scrivere file di tipo DBF è necessario caricare nel proprio ambiente una libreria PHP5 denominata dbase.so. I metodi messi a disposizione dalla libreria sono pochi ma utili allo scopo. L’installazione è abbastanza semplice, è necessario scaricare e compilare il codice e installare il modulo apache. Per un elenco dei metodi messi a disposizione dal modulo si consiglia questo link. Vediamo ora qualche tecnica di importazione e la strada che abbiamo scelto per importare prodotti configurabili da un file DBF a Magento. Supponiamo che il fileName contenga un elenco di dati che rappresenti un prodotto configurabile. Per avere sempre a disposizione l’elenco dei prodotti, possiamo utilizzare una collection Varien per caricarci i prodotti letti dal file DBF. Vediamo quindi come caricare un file dbf in una collection.


class Vendor_Module_Model_DbfReader {

public function __construct($fileName)
{
$this->_fileName = $fileName;

}

public function read()
{
$collection = new Varien_Data_Collection();

if (!file_exists($this->_fileName) || !is_readable($this->_fileName)) {
Mage::throwException(‘file:’ . $this->_fileName . ‘ non esiste’);
}

$header = null;
$db = dbase_open($this->_fileName, 0);

if ($db) {
$record_numbers = dbase_numrecords($db);
for ($i = 1; $i <= $record_numbers; $i++) { $row = dbase_get_record_with_names($db, $i); $item = new Varien_Object(); $item->addData($row);
$collection->addItem($item);
}
}

return $collection;
}
}

A questo punto posso utilizzare la mia collection per fare delle ricerche oppure per caricare i dati del dbf in magento.

Visto che ho una collection posso utilizzare una funzione di ricerca:


public function find($key, $val)
{
return $this->_collection->getItemsByColumnValue($key, $val);
}

Oppure posso rimuovere un elemento:

public function removeItem($item){
$this->_collection->removeItemByKey($item->getId());
}

A questo punto è facile utilizzare la collection per eseguire il caricamento dei prodotti. Nel nostro caso dobbiamo caricare dei prodotti configurabili che contengono dei tier prices. Il progetto è un negozio online per il settore antinfortunistica. Lo realizzeremo completamente con il nostro caro Magento, un software che nei progetti complessi si rivela molto utile e stabile.