2013-04-14 13 views
8

ho scritto uno script che aggiorna il mio attributo add_ten_pence, l'attributo è un sì/no valore booleano. Al momento passa attraverso il SKU's nel database, ma purtroppo non è l'aggiornamento del database. Ho incollato la sceneggiatura qui sotto qualcuno sa dove sto andando male?Aggiornamento Magento Attributo di programmazione

L'attributo è impostato su 'No' di default, e desidero cambiare a 'Sì' quando lo script viene eseguito, e viceversa.

require_once('app/Mage.php'); 

umask(0); 
Mage::app('default'); 
Mage :: app()->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID); 
$productCollection = Mage::getModel('catalog/product')->getCollection(); 

foreach($productCollection as $_product) 
{ 
    echo "\n".'updating '.$_product->getSku()."...\n"; 
    $product = Mage::getModel('catalog/product')->load($_product->getEntityId()); 
    $product->setAddTenPence(true); 
    $product->save(); 
} 

risposta

25

Provare a salvare il singolo attributo anziché l'intera raccolta di prodotti. modo

require_once('app/Mage.php'); 

umask(0); 
Mage::app('default'); 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
$productCollection = Mage::getModel('catalog/product')->getCollection(); 

foreach($productCollection as $_product) 
{ 
    echo "\n".'updating '.$_product->getSku()."...\n"; 
    $_product->setData('add_ten_pence', 1)->getResource()->saveAttribute($_product, 'add_ten_pence'); 
} 

UPDATE

Molto più veloce:

$productCollection = Mage::getModel('catalog/product')->getCollection(); 
$array_product = $productCollection->getAllIds();  
Mage::getSingleton('catalog/product_action')>updateAttributes($array_product, array('add_ten_pence' => 1), Mage_Core_Model_App::ADMIN_STORE_ID); 

(Grazie https://magento.stackexchange.com/users/146/marius!)

+0

Eccellente, grazie per il vostro aiuto! – iamgraeme

+1

Quando ho messo questo frammento Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID); funziona per me, perché è necessario quando il codice viene eseguito in un'area frontend, se il controller è admin non è necessario set ADMIN_STORE_ID. – jruzafa

+0

Grazie, ho ottimizzato molto il mio tempo di risparmio. BTW: dove trovo di solito tutti i metodi disponibili su un oggetto? Non c'è documentazione per Magento che potrebbe aiutare con questo. – Alan

Problemi correlati