2013-04-14 4 views
8

Ich habe ein Skript geschrieben, das mein Attribut add_ten_pence aktualisiert, das Attribut ist ein Ja/Nein-Wert. Im Moment läuft es durch die SKU's in der Datenbank, aber leider aktualisiert es die Datenbank nicht. Ich habe das folgende Skript eingefügt: Weiß jemand, wo ich falsch liege?Magento-Attribut programmgesteuert aktualisieren

Das Attribut ist standardmäßig auf 'Nein' eingestellt, und ich möchte es in 'Ja' ändern, wenn das Skript ausgeführt wird, und umgekehrt.

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(); 
} 

Antwort

25

Versuchen Sie, das einzelne Attribut anstelle der gesamten Produktkollektion zu speichern.

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

Viel schneller Weg:

$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); 

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

+0

ausgezeichnet, vielen Dank für Ihre Hilfe! – iamgraeme

+1

Wenn ich dieses Snippet Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID); es funktioniert für mich, weil es notwendig ist, wenn Code im Bereich Frontend ausgeführt wird, wenn Ihr Controller es Admin ist, ist es nicht notwendig ADMIN_STORE_ID festgelegt. – jruzafa

+0

Danke, das hat meine Sparzeit sehr optimiert. Übrigens: Wo finde ich normalerweise alle verfügbaren Methoden für ein Objekt? Es gibt keine Dokumentation für Magento, die dabei helfen könnte. – Alan