buzzoole code
Web Marketing

Come aggiornare velocemente i prezzi dei prodotti in Magento

aggiornare prezzi magento

Spesso capita di dover aggiornare in modo rapido i prezzi dei prodotti di Magento.
Nel caso il negozio non possieda un grande numero di articoli, questo procedimento di può comodamente fare a mano utilizzando il backend di Magento stesso e la scheda prodotto.
Ma quando si ha a che fare con uno store contenente migliaia o decine di migliaia di articoli questo procedimento risulterebbe troppo dispendioso in termini di tempo, per questo si può utilizzare una semplice query e un file in formato CSV; vediamo come.

Prima di tutto ci tengo a precisare che questo codice è stato scritto dai mitici autori del blog di Magepsycho a cui non voglio sottrarre il merito.
Creiamo un file CSV contenente solamente due colonne: nella prima inseriamo gli sku dei prodotti e nella seconda i prezzi da aggiornare.
Creato il file andrà fatto l’upload dello stesso all’ interno della root principale di Magento. Non inseritelo da altre parti altrimenti il codice non funzionerà.

A questo punto create un file PHP con il vostro editor preferito e chiamatelo per esempio upload_prezzi.php e copiate al suo interno il codice seguente(ripeto creato dagli autori di Magepsycho):


/**
* @author MagePsycho <info@magepsycho.com>
* @website http://www.magepsycho.com
* @category Export / Import
*/
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app('admin');
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
set_time_limit(0);
ini_set('memory_limit','1024M');
/***************** UTILITY FUNCTIONS ********************/
function _getConnection($type = 'core_read'){
return Mage::getSingleton('core/resource')->getConnection($type);
}
function _getTableName($tableName){
return Mage::getSingleton('core/resource')->getTableName($tableName);
}
function _getAttributeId($attribute_code = 'price'){
$connection = _getConnection('core_read');
$sql = "SELECT attribute_id
FROM " . _getTableName('eav_attribute') . "
WHERE
entity_type_id = ?
AND attribute_code = ?";
$entity_type_id = _getEntityTypeId();
return $connection->fetchOne($sql, array($entity_type_id, $attribute_code));
}
function _getEntityTypeId($entity_type_code = 'catalog_product'){
$connection = _getConnection('core_read');
$sql = "SELECT entity_type_id FROM " . _getTableName('eav_entity_type') . " WHERE entity_type_code = ?";
return $connection->fetchOne($sql, array($entity_type_code));
}
function _getIdFromSku($sku){
$connection = _getConnection('core_read');
$sql = "SELECT entity_id FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?";
return $connection->fetchOne($sql, array($sku));
}
function _checkIfSkuExists($sku){
$connection = _getConnection('core_read');
$sql = "SELECT COUNT(*) AS count_no FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?";
$count = $connection->fetchOne($sql, array($sku));
if($count > 0){
return true;
}else{
return false;
}
}
function _updatePrices($data){
$connection = _getConnection('core_write');
$sku = $data[0];
$newPrice = $data[1];
$productId = _getIdFromSku($sku);
$attributeId = _getAttributeId();
$sql = "UPDATE " . _getTableName('catalog_product_entity_decimal') . " cped
SET cped.value = ?
WHERE cped.attribute_id = ?
AND cped.entity_id = ?";
$connection->query($sql, array($newPrice, $attributeId, $productId));
}
/***************** UTILITY FUNCTIONS ********************/
$csv = new Varien_File_Csv();
$data = $csv->getData('prices.csv'); //path to csv
array_shift($data);
$message = '';
$count = 1;
foreach($data as $_data){
if(_checkIfSkuExists($_data[0])){
try{
_updatePrices($_data);
$message .= $count . '> Success:: While Updating Price (' . $_data[1] . ') of Sku (' . $_data[0] . ').
';
}catch(Exception $e){
$message .= $count .'> Error:: While Upating Price (' . $_data[1] . ') of Sku (' . $_data[0] . ') => '.$e->getMessage().'
';
}
}else{
$message .= $count .'> Error:: Product with Sku (' . $_data[0] . ') does\'t exist.
';
}
$count++;
}
echo $message;

Dopodichè non resterà che digitare sulla barra degli indirizzi www.nometuosito.com/upload_prezzi.php.
E voilà i prezzi dei vostri prodotti verranno aggiornati in un attimo.
Analogamente si può fare con le giacenze di magazzino o con qualsiasi altro attributo creato da voi, applicando solo alcune piccole modifiche al codice.

VERSIONE DI MAGENTO DI TEST: 1.7.2
PROBLEMI RISCONTRATI: nel caso riceviate un errore 503 dopo aver eseguito il codice vi consiglio di editare la riga in cui viene riportato la dicitura ini_set('memory_limit','1024M'); in quanto non sempre vi è possibile modificare questo valore di configurazione del file php.ini. Dipende dall’hosting che avete.
Una cosa a cui fare molta attenzione è il fatto che questo metodo non prevede alcun controllo su chi effettua l’aggiornamento, chiunque digiti l’url corretto può lanciare lo script, Per questo consiglio vivamente di proteggere il file upload_prezzi con user e password.

Facebook Comments

About the author

admin

Ciao Sono Davide Ambu, web designer e consulente di web marketing freelance. Parlo solo di marketing che non interessa a nessuno

Add Comment

Click here to post a comment

Su di me

admin

Ciao Sono Davide Ambu, web designer e consulente di web marketing freelance. Parlo solo di marketing che non interessa a nessuno

Ci rivediamo su Facebook!