Magento中Cronjob之后的Reindex产品 - 可配置产品显示缺货

时间:2013-05-17 16:54:17

标签: magento magento-1.7

我已经编写了一个扩展程序,可以为Magento 1.7保存更新一些自定义运输价值属性。一切正常,保存产品时都会更新。然而,我还需要一个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";
 }

2013年5月17日更新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";
}

2 个答案:

答案 0 :(得分:0)

执行cron作业后,您可以更新索引器:

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

答案 1 :(得分:-2)

执行cron作业后,您可以更新索引器:

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

hello dhawal如果我必须运行一个cron作业来重新索引网站上的产品,我必须使用此代码放置你提到的代码

$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";
}

在同一页面?