2013-05-17 113 views
1

我寫了一個Extension,它爲Magento 1.7保存了一些自定義的裝運值屬性。所有的工作都很好,當保存產品時應該儘可能地更新。不過,我還需要一個cronjob每晚更新它們以防我需要通過董事會更改運輸成本。Magento中的Cronjob後的重新編譯產品 - 可配置的產品缺貨

是否全部正常工作,並正在更新屬性值,但在前端,所有可配置產品均顯示爲Out of Stock,簡單產品沒問題。

如果我去管理員,只需點擊主產品,並保存它沒有做任何事情,它在前端顯示爲In Stock。此外,如果我去索引和重新索引Product Attributes它再次顯示爲在股票前端。我認爲我的cronjob需要更新索引器來保存每個產品。

環顧四周我使用了下面的代碼,但它似乎沒有更新產品,並想知道是否有人可以提供幫助。我已經嘗試了Mage_Catalog_Model_ProductTYPE_SAVE的不同變化,但無法找到我應該使用的東西!

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId()); 

$updateProduct->setShippingLabel($shippData['delivery_type']); 
$updateProduct->setShippingPrice($shippData['price']); 
$updateProduct->setShippingNote($shippData['notes']); 
try { 
    $updateProduct->save(); 
    $updateProduct->setForceReindexRequired(true); 
    Mage::getSingleton('index/indexer')->processEntityAction(
    $updateProduct, 
    Mage_Catalog_Model_Product::ENTITY, 
    Mage_Index_Model_Event::TYPE_SAVE 
    ); 

    echo $updateProduct->getId()." Successfully Updated \n"; 
    } catch(Exception $e){ 
    echo $e->getMessage().$updateProduct->getId()."\n"; 
} 

更新17/5/2013 20:28

一直在玩的代碼,這項修正案似乎工作,如果是完全無用的,這樣做,請讓我的笨方法知道

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId()); 
$updateProduct->setShippingLabel($shippData['delivery_type']); 
$updateProduct->setShippingPrice($shippData['price']); 
$updateProduct->setShippingNote($shippData['notes']); 
try { 
    $updateProduct->save(); 
    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product->getId()); 
    $stockItem->setForceReindexRequired(true); 
    Mage::getSingleton('index/indexer')->processEntityAction(
     $stockItem, 
     Mage_CatalogInventory_Model_Stock_Item::ENTITY, 
     Mage_Index_Model_Event::TYPE_SAVE 
    ); 
    echo $updateProduct->getId()." Successfully Updated \n"; 
} catch(Exception $e){ 
    echo $e->getMessage().$updateProduct->getId()."\n"; 
} 

回答

0

您的cron作業的執行後,您可以更新索引:

$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach ($indexingProcesses as $process) { 
$process->reindexEverything(); 
} 
+0

我認爲麻煩在於它通過8000多種產品,所以需要相當長的時間來運行,所以要等到它全部完成後,相當長的時間內,商品顯示爲缺貨,並且不允許任何商品要購買 –

-2

您的cron作業的執行後,您可以更新索引:如果我要在現場運行cron作業重新索引產品

$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach ($indexingProcesses as $process) { 
$process->reindexEverything(); 
} 

你好dhawal,我一定要放置在你的代碼用此代碼提及

$updateProduct = Mage::getModel('catalog/product')->load($_product->getId()); 
$updateProduct->`setShippingLabel`($shippData['delivery_type']); 
$updateProduct->setShippingPrice($shippData['price']); 
$updateProduct->setShippingNote($shippData['notes']); 
try { 
    $updateProduct->save(); 
    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product->getId()); 
    $stockItem->setForceReindexRequired(true); 
    Mage::getSingleton('index/indexer')->processEntityAction(
     $stockItem, 
     Mage_CatalogInventory_Model_Stock_Item::ENTITY, 
     Mage_Index_Model_Event::TYPE_SAVE 
    ); 
    echo $updateProduct->getId()." Successfully Updated \n"; 
} catch(Exception $e){ 
    echo $e->getMessage().$updateProduct->getId()."\n"; 
} 

at same page?

相關問題